session理解起来有点晕

字体: | 打印

真的是很晕哦,理解不了。
下面说说我能认知到的session是什么模样,希望有高手能指点一二哦。

做一个session表存储到mysql当中,包括SID、expiration日期和session值

一. 当用户浏览器存有$_COOKIE['PHPSESSID'],然后到session表当中找相同的SID,这样就可以把session值取出来,就是不用登陆了。
    假如session表当中没有找到匹配值,表示expiration过期被自动删除了,那么需要用户重新登陆。

二. 用户浏览器没有$_COOKIE['PHPSESSID'],那么用户需要登陆,用户输入的值拿到user表当中比对,能正确匹配的的话插入一条记录到session表。
    通常情况是COOKIE被用户删掉了,假设浏览器禁用cookie的话,那么用户每一次访问都需要登陆。

三. 如果浏览器禁用cookie的话,用户关闭浏览器再打开的话是不是session就失效了?

//我的一些设置
ini_set('session.save_handler', 'user');
ini_set('session.cookie_lifetime', '2592000');
ini_set('session.gc_maxlifetime', '2592000');//这个似乎无效 需要在get_cfg_var("session.gc_maxlifetime")后面手工加数字?


我也来说两句 查看全部评论 相关评论

  • 于安 (2008-7-24 07:51:16)

    第一, 不要把session与cookie搞混....两才只用其一也可.

      它们的区别在于,一个是保存在服务器,一个是保存在用户电脑上.     

      还有,你的写法有问题...

    ini_set('session.cookie_lifetime', time()+3600);     //一小时有效.
  • sara (2008-7-24 07:55:37)

    那存在浏览器COOKIE当中的PHPSESSID是做什么用的?
  • 于安 (2008-7-24 07:56:18)

    QUOTE:

    原帖由 sara 于 2008-7-24 07:55 发表
    那存在浏览器COOKIE当中的PHPSESSID是做什么用的?
    把session的加密值存在cookie中只是为了安全考虑.....
    你要明白,cookie是可以伪制的, 所以通常都搞些连爱因斯坦都解不开的数值为好.

    [ 本帖最后由 于安 于 2008-7-24 07:57 编辑 ]
  • sara (2008-7-24 08:09:47)

    那session.gc_maxlifetime就相当于COOKIE有效期了?
    只要用户不换电脑或浏览器就一直有效?电脑重启了也有效?
  • 于安 (2008-7-24 08:18:18)

    没到时间,都有效....

    是以时间为标准.
  • sara (2008-7-24 08:33:23)

    我说的有效是要不要重新登陆的问题,重启了电脑不就要重新登陆了?这个和COOKIE不太一样?
  • 于安 (2008-7-24 08:38:43)

    看你设置的时间是多少....  如果是一万年,,, 基本上永远不用重新登录.
  • sara (2008-7-24 08:46:12)

    这么神奇啊
    session是怎么知道我就是以前登陆的那个用户?浏览器里又保存任何东西
  • 于安 (2008-7-24 09:19:47)

    session 我没有用过..

    我用过cookie..  谁登录了, 就在他电脑上有个文件,,,,   这就区别得了.
  • txle (2008-7-24 11:23:06)

    -0- 感觉在LS忽悠啊...
    PHP的SESSION机制看下吧
    确定客户端是哪个SESSION 不是通过COOKIE就是get 要么就用一个自己设计一个规则 比如依靠IP判断什么的-0- 不过也是有局限性的.
    一般来说 SESSION脱离COOKIE无法做到关闭浏览器后再次打开可以依然对应
  • Popper (2008-7-24 11:28:21)

    同意楼上的说法!