PHP开发 加入小组

298个成员 3006个话题 创建时间:2011-05-30

php跨页session丢失问题

发表于 2011-11-11 5082 次查看

今天遇到一个很郁闷的问题,我在登录页面,登录成功后,创建session并赋值。然后,到会员中心页面,session就丢失了。跨页session丢失。去网上查了下资料,在和群友的讨论后。原来是 session_id()惹的祸......

参考 http://hi.baidu.com/xworld_bd/blog/item/93220d53d6093f401038c28e.html

10回复
  • 2楼 kent 2011-11-11

     这几年参与的系统,都已经不依赖PHP原生的Session了。主要考虑Web服务器的横向添加容易。

  • 3楼 xworld 2011-11-11
    @kent: 这几年参与的系统,都已经不依赖PHP原生的Session了。主要考虑Web服务器的横向添...

    不懂

  • 4楼 kent 2011-11-11

    假设你依赖了PHP的Session机制,如果一台Web服务器的压力达到了极限,那要做两台甚至更多台Web服务器集群,以便负载均衡,而集群又要考虑到客户访问到任意一台,Session都是有效的,这就需要考虑拷贝Session,如果用原生态的PHP Session机制,你的考虑各台服务器之间的Session复制。

  • 5楼 xworld 2011-11-11

    那主要方法有哪些啊?具体的思路。

  • 6楼 myth 2011-11-11

    PHP的SESSION在服务器上是文件形式存储的,像KENT前辈说的扩展起来会很麻烦,多服务器你还需要考虑会话保持或者SESSION共享的问题,现在客户端越来越发达了, 建议用COOKIE+数据库来做,省去不必要的麻烦

  • 7楼 HiZhou 2011-11-13

    session整个流程和机制搞通了,自己实现几个还是简单的。

  • 8楼 xworld 2011-11-13

    看来还得努力学习啊。

  • 9楼 kent 2011-11-14

    基本思路是:

    1、在数据库里建一张Session表

    2、用户登录时,你自动给其生成Session ID, 扔到Cookies,并把Session扔到数据库

    3、下次用户访问时候,读取Cookie的Session ID,然后去数据库取该条Session数据,你就知道当前用户是谁(当然你可以让Session表帮你存更多东西),并更新该条记录最新访问时间

    4、定期(比如半个小时)清理Session表里不活动的记录.

     

    仔细想想,是不是挺简单的? @xworld

  • 10楼 xworld 2011-11-14

    嗯。很好。

  • 11楼 kent 2011-11-14

    当然,如果为了性能,可以架上cache层。比如memcached

发表回复
功能维护升级中,维护完成完后将再次开放,非常抱歉给您学习造成的不便。