> I'm using sessions for authentication in a content management system and
> experiencing rare but occasional problems with the session apparently
> expiring unexpectedly. I've checked the manual and I've reviewed the
session
> configuration on the commericial host I'm using. I don't see anything
wrong,
> but there are some settings that I don't understand:
>
> session.gc_maxlifetime 1440 -- Garbage collection after 24 minutes? Does
> this mean that the session id and session variables will be cleared after
24
> minutes of inactivity? (Surely not; that doesn't make sense.) And cleared
> from where, the directory specified in session.save_path?

Yes and Yes. After 1440 seconds of not being accessed, they are deleted the
next time the garbage collection routine is ran.

> session.save_path /tmp -- The session id and session variables are stored
in
> this directory, and it's more secure to specify a different directory. Is
it
> more stable to specify a different directory? Is it more stable to use a
> database?

Depends on what else your server is doing and how much traffic you get. If
you get a lot of traffic, there are going to be a lot of session files
sitting in this directory. Keeping it separate from /tmp will just reduce
the number of files in the directory.

A database adds to much overhead and is only needed in special cases, IMO.

> session.cache_expire 180 -- The cache expires after 3 hours? If
> session.cache_limiter is set to nocache, is session.cache_expire relevant?

Not sure on that one, but it seems logical.

> Basically, I want users to be able to stay logged in to the content
> management system indefinitely, but my tests show that after about 2 hours
> of inactivity, the session expires. (Going to a different page causes the
> session variable that identifies the user to be checked with
> session_is_registered(), and access is denied if the variable isn't
> registered.) Some users have reported this happening after about 30
minutes.

Garbage collection isn't exact. It's triggered (by default) on 1% of the
hits to your site. So if two are triggered close together, then someone can
be logged out rather quickly at 30 minutes. If there is a long pause where
the probability just doesn't trigger the garbage collection, then it may
take longer.

> I'm on LInux, PHP 4.1.2, session.cookie_lifetime setting is 0,
> session.use_cookies setting is On, session.use_trans_sid setting is 1, and
> other configurations as mentioned above. Why are sessions expiring?
Comments
> and directions to more information are appreciated.

Sessions are lost when the file is cleaned up by garbage collection or when
the user closes the browser (by default). So, if you wanted to use the
existing session handling routines, you could set the cookie lifetime to a
large value so the cookie isn't deleted and set the gc_maxlifetime to a
large value, also. You could possibly turn the gc_probability to zero, go
garbage collection is never triggered.

Another option would be to use session_save_path() within your application
to save the session files to a separate directory that's writable by the web
server. Since this directory is different from session.save_path specified
in php.ini, garbage collection will never occur, so the files will not be
deleted.

You can also define your own session handler to do what you want.

Why not just use a cookie to "remember me" though, instead of keeping the
sessions persistant? You're going to end up with a file on your computer for
_every_ person that visits the site and the file will not go away. Seems
like it'd be better to just use a cookie and load their data if it's not
already present, like on their first visit.

---John Holmes...


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to