SMF Login hiba

Started by K3zX, 2018-07-27, 13:33:41

Sziasztok.

Ugyan azzal a gonddal küszködök mint ez a fórum is.
Amikor a kezdőlapon felül akarok bejelentkezni, ez az üzenet vár:
"A munkameneted lejárt hozzászólás közben. Kérlek menj vissza és próbáld újra."

A bejelentkezés gombra kattintva, és ott bejelentkezve természetesen működik, úgy ahogy itt is.
Google-n találtam tré megoldást rá, hogy a fórum php fájlaiban ki kell venni pár csekkolást, azonban ezekkel biztonsági rést is csinálunk, tehát ez sem megoldás.

Valakinek van valami konkrét információja miért van ez a jelenség?

2018-07-27, 14:59:03 #1 Last Edit: 2018-07-27, 15:00:36 by Deangerious
Ez a jelenség azért van, mert az FMS motorja $_SESSION-t használ és mikor bejelentkezel a felső panelen, az átirányít bejelentkezés után, de mielőtt átírányít lezárja az előző sessiont és nem nyit újat az új oldalra, ergó törli a bejelentkezésedet, mintha meg sem történt volna.

Itt találsz rá töbféle megoldást (érteni kell PHP-hoz):




First, carry out these usual checks:

    Make sure session_start(); is called before any sessions are being called. So a safe bet would be to put it at the beginning of your page, immediately after the opening <?php declaration before anything else. Also ensure there are no whitespaces/tabs before the opening <?php declaration.
    
After the header redirectend the current script using exit(); (Others have also suggested session_write_close(); and session_regenerate_id(true), you can try those as wellbut I'd use exit();)
    Make sure cookies are enabled in the browser you are using to test it on.
    Ensure register_globals is off, you can check this on the php.ini file and also using phpinfo(). Refer to this as to how to turn it off.
    Make sure you didn'
t delete or empty the session
    Make sure the key in your $_SESSION superglobal 
array is not overwritten anywhere
    Make sure you redirect to the same domain
So redirecting from a www.yourdomain.com to yourdomain.com doesn't carry the session forward.
    Make sure your file extension is .php (it happens!)

Now, these are the most common mistakes, but if they didn'
do the trickthe problem is most likely to do with your hosting company. If everything works on localhost but not on your remote/testing serverthen this is most likely the culpritSo check the knowledge base of your hosting provider (also try their forums etc). For companies like FatCow and iPagethey require you to specify session_save_pathSo like this:

session_save_path('"your home directory path"/cgi-bin/tmp');
session_start();

(
replace "your home directory path" with your actual home directory pathThis is usually within your control panel (or equivalent), but you can also create a test.php file on your root directory and type:

<?
php echo $_SERVER['SCRIPT_FILENAME']; ?>


The bit before 'test.php' is your home directory path. And of course, make sure that the folder actually exists within your root directory. (Some programs do not upload empty folders when synchronizing)


Erről beszélek, ez a konkrét megoldás:


Ugyebár itt bezárja az adott munkamenetet, de nem nyit ujat mielőtt áttirányít, vagy az adott oldalon nincs nyitva session ahová átirányít:
session_destroy();

Így lenne jó:
session_destroy();
session_start();

Vagy ezt tedd az átirányított oldal forráskódjának elejére (php):
session_start();




Valamint az is befolyásol, hogy a kód hogyan irányít át a bejelentkezés után:
- Headerrel:
header('http://'.$_SERVER['HTTP_HOST'].'/');

- JavaScriptel, de ez akkor számít ha újabb FMS verzióról beszélünk, valamint hogy a template az Jqueryt használ-e, mert abban használják az ajax szinkronizációt.

Ez ilyen tervezői hiba is lehetne, hogy elavult ez a fajta munkamenet kezelés, mivel a sessiont az össze adattal ki lehet olvasni, mivel böngészőben tárolja, nowdays a szerveres munkamenet kezelés a biztonságos, egy sorozat koddal ellátva. Különben a $_COOKIE is hasonlóan működik, csak hogy ott nem kell sessionokat nyitogatnod a lapok elején (php kódban). De erről még sokat lehetne beszélni, nyilván nem írtam túl részletesen, mert nem lenee rá elég a nap, valamint vitatkozni is lehetne a munka menet kezelések típusainak hatékonyságáról, de nem ezt kérdezted. :)

2018-07-27, 15:13:22 #2 Last Edit: 2018-07-27, 16:41:42 by K3zX
QuoteUgyebár itt bezárja az adott munkamenetet, de nem nyit ujat mielőtt áttirányít, vagy az adott oldalon nincs nyitva session ahová átirányít:
session_destroy();

Így lenne jó:
session_destroy();
session_start();

Ezt kipróbáltam, nem jó.

QuoteVagy ezt tedd az átirányított oldal forráskódjának elejére (php):
session_start();

Itt az a gond pontosan nem tudom melyik php-ba kellene.
Amit próbáltam: LogInOut, Subs-Auth




Szerk2:

Megemlítetted a template-eket, kipróbáltam az alappal. Azzal meg működik :D
Tehát a fórum téma okozza. Van valakinek ötlete pontosan mi avult el benne és hol?

2018-07-27, 16:02:51 #3 Last Edit: 2018-07-27, 16:17:43 by Deangerious
Nem elavult, hanem inkább korszerűbb az a template.

Szóval mint írtam nyílván a template már javascriptel dolgozik, vagy ha nem akkor rosszúl van megírva a sablon.

Próbálj ki más korszerűbb(nek tűnő) sablont (template) is.

Üzenet összefésülés: 2018-07-27, 16:10:21

Tessék itt a megoldás: https://wiki.simplemachines.org/smf/Login_error_2.0.14

Leír mindent, angol tudás gyere elő. :)

A lényeg hogy a <form> tagba kerüljön a leírásban említett html kód, amely egy rejtett inputtal küldi át az aktuális munkamenet azonosítót. (Ugye amiről írtam, hogy törölve van miután belép, de így elmenti és továbbítja egy rejtett mezőben. Nyugi, ez nem jelent kockázatot, ez természetes környezet, ez egy egyszerű bug fix.)

Ha nem boldogulsz írsz és 40 sec alatt be pattintjuk... (ha mindene meg van nyitva ami kell. :P)

2018-07-27, 16:37:01 #4 Last Edit: 2018-07-27, 16:44:12 by K3zX
Köszi, működik, zárom :D

[spoiler]Amúgy én úgy oldottam meg hogy az egész echo-t ami tartalmazta a "login2"-s részt, kimásoltam az alapból.
Működött, de meg kellett volna formázni hogy úgy nézzen ki mint előtte. Amit linkeltél azt csak az alap kódba beletettem és jó lett, így hálisten nem kell formázgatnom :D[/spoiler]