Jump to content
php.lv forumi

Mistika ar Sessijas timeout


Valcha

Recommended Posts

Būtiba - vēlos, lai sesijas dati nepazustu 24 stundu garumā. Pašlaik ir tā, ka sesija pazūd un pārģenerējas sessijas id, ja taimauts ir mazliet zem 60 minūtēm.

Esmu pārlasījis pusi gogles, risinājumu nerodu.

Nedarbojas ne uz Win, ne uz Linux. PHP versija 5.

Pēc būtības vajadzētu iztikt ar:

 

 

ini_set('session.gc_maxlifetime', '86400');
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);
/* arī šo rindiņu mēģināju, man izskatījās, ka viņa darbojās galīgi ne - ok */
ini_set('session.cookie_lifetime', 86400);

 

Patiesībā šis ne vella neadarbojas. Mēģināju arī samazināt sesijas laiku uz 10 sekundēm, arī nekas nemainās - dati nedzēšas.

Varbūt kāds palīdzēs ar padomu?

 

- - -

 

PHP sesijas conf:

Directive Local Value Master Value

session.auto_start Off Off

session.bug_compat_42 Off Off

session.bug_compat_warn On On

session.cache_expire 180 180

session.cache_limiter nocache nocache

session.cookie_domain no value no value

session.cookie_httponly Off Off

session.cookie_lifetime 86400 0

session.cookie_path / /

session.cookie_secure Off Off

session.entropy_file no value no value

session.entropy_length 0 0

session.gc_divisor 1 1000

session.gc_maxlifetime 86400 1440

session.gc_probability 1 1

session.hash_bits_per_character 5 5

session.hash_function 0 0

session.name PHPSESSID PHPSESSID

session.referer_check no value no value

session.save_handler files files

session.save_path no value no value

session.serialize_handler php php

session.use_cookies On On

session.use_only_cookies On On

session.use_trans_sid 0 0

Edited by Valcha
Link to comment
Share on other sites

Pievienoju jaunu session path:

ini_set('session.gc_maxlifetime', 3);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);

ini_set ('session.save_path', 'c:\session');

session_start();
$_SESSION['cnt'] = isset ($_SESSION['cnt']) ? $_SESSION['cnt']+1 : 0;
print_R ($_SESSION);

 

Iztīru, protams, arī cookies, bet tāpat vecā dziesma. Jaunajā direktorijā sessijas fails rakstās, bet neko... Pozitīva skripta iznākuma gadījumā būtu jābūt, ka session['cnt'] = 0, ja 3 sekundes ir neaktīvs...

- - -

 

Directive Local Value Master Value

session.auto_start Off Off

session.bug_compat_42 Off Off

session.bug_compat_warn On On

session.cache_expire 180 180

session.cache_limiter nocache nocache

session.cookie_domain no value no value

session.cookie_httponly Off Off

session.cookie_lifetime 0 0

session.cookie_path / /

session.cookie_secure Off Off

session.entropy_file no value no value

session.entropy_length 0 0

session.gc_divisor 1 1000

session.gc_maxlifetime 3 1440

session.gc_probability 1 1

session.hash_bits_per_character 5 5

session.hash_function 0 0

session.name PHPSESSID PHPSESSID

session.referer_check no value no value

session.save_handler files files

session.save_path c:\session no value

session.serialize_handler php php

session.use_cookies On On

session.use_only_cookies On On

session.use_trans_sid 0 0

Edited by Valcha
Link to comment
Share on other sites

Es nepaļautos uz gc_*, lai kontrolētu precīzus sessijas timeoutus. Labāk ievies $_SESSION['started']=time(); un if(time() - $_SESSION['started'] > 3)session_destroy();

 

Likt session.gc_probability un session.gc_divisor uz 1 ir absurds, sapratīsi, kad būs daudz daudz pieprasījumu sekundē :)

Link to comment
Share on other sites

marrtin, bet kā tad man tas sessija variablis $_SESSION['started'] būs pieejams, ja sessija pēc ~ 50 minūtēm dzēšas?

Varbūt vakars un labi nedomājas.. :) Man kaut kā izskatās, ka velk uz sessijas glabāšanu datubāzē.

 

Vai tiešām nav variantu, kā vienkārši ar php iebūvētām funkcijām panākt 24h ilgu sessiju?

Link to comment
Share on other sites

Nav obligāti datubāzē.

 

Priekš kā tev $_SESSION['started'], ja sessija ekspirējusies?

 

Uzliec session.gc_maxlifetime uz 24h (3600 * 24). Ja nekas tajā sesijā netiks darīts 24h, tad arī sesijas fails tiks izdzēst ar varbūtību ņemot vērā gc_probability un gc_divisor. Bet visādi citādi čeko pēc $_SESSION['started'] (vai $_SESSION['updated'] - kā nu vajadzīgs). $_SESSION['started'] updeito uz time() katreiz, kad notiek kāda darbība sesijā.

 

Ja sesijas ID glabā cepumos, tad session.cookie_lifetime arī uzstādi uz 24*3600.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...