hehe,3里面是“不同域名的网站公用session问题。”

解决方案 »

  1.   

    session的内容是储存在服务端的(session ID是储存在客户端的,一般都是储存在cookie里的),而cookie的内容是储存在客户端的,使用cookie,则如果服务器端脚本编写不严格,则可能留下漏洞,客户端可能通过伪造cookie来达到某种目的,从安全角度来讲,session应该比cookie好的多。你说的这种同域名(test.com)下面的不同主机的cookie是可以共享的,就是在setcookie的时候,把domain设置为  .test.com     关于这个的详细介绍可以参考一下www.php.net/setcookie  ,将cookie的domain设置为.test.com后,test.com下的所有二级域名都可以共用cookie。
      

  2.   

    ini_set("session.cookie_domain",".test.com");
    session_start(); 
    //some code
      

  3.   

    (3)的方法可行不?如果可行的话是不是更好些?
    但是有个问题,就是那张表,如果频繁访问的话就失去意义了吧?还有就是从表中删除过期session的问题,后台实现,还是如何?
    感觉不太好。
    不过当然,如果cookie够安全,设置.test.com下的cookie最好了:)
      

  4.   

    你说的那个session表的操作,不浪费很多时间的,你在建立表的时候把表类型定义为heap型的,heap型表是直接存在内存里的,那样操作起来就很快。一般,使用你说的这种方法都是避免有些服务器的session配置不好,无法使用php内置的session功能的,你可以参考一下discuz论坛的记录方法,就是:首先随机成生一个字符串,保存在客户端cookie中作为标识,然后再在数据库中查询该用户的一些常用资料保存在session表中。至于你说的删除过期session的问题,解决方法是在表中增加一个lastactivity字段用来标识用户的最后一次操作的时间,用户每次操作都更新lastactivity的值,这样更新的时候可以根据上次操作时间来删除。
      

  5.   

    to  nuying117(Danny) 
    "至于你说的删除过期session的问题,解决方法是在表中增加一个lastactivity字段用来标识用户的最后一次操作的时间,用户每次操作都更新lastactivity的值,这样更新的时候可以根据上次操作时间来删除。"
    怎么删除呢?客户端验证时?通过什么判断那个是他的?不要告诉我删除表里所有过期的。。
      

  6.   

    还有个白痴问题:session只能是一个域名下的么?二级域名不能用主域名的session么?
    嘿嘿,白痴问题
      

  7.   

    TO:yh801216(艾奥利斯) ,删除的时候就直接一个delete语句就可以了,如果不删除所有过期的话,那么别的过期的session如何来删除?假如当前用户只删除自己的过期session,那么当前用户如果一登陆马上退出,你怎么删?如果是某客户的session已经被删除,那么你可以事先就在某客户那里存储其用户名和密码的md5加密值,每次操作验证一遍,加入session表中未发现该客户的session记录,那么就自动增加该记录,假如已经存在就update你凭空想想,跟实际做做差别很大的,知道思路,你自己做做试试,很简单的。而且控制也不麻烦,还是那句话,建议你看看discuz论坛的session处理办法。
      

  8.   

    nuying117(Danny) ,
    呵呵,不是能不能实现的问题。如果这里频繁的访问数据库的话,对mysql的压力太大了。delete语句谁都会写,可问题不在这里。
    并且,按照你说的,你的cookie都要domain->.test.com ,还要这个表干什么呢?没有太大必要了。仔细看看我说的。另外,既然说到这个问题,自然引出的就是多web服务器作负载均衡,也许还会引出多数据库服务器。
    这也是我遇到的实际问题,目前是双web服务器,数据库只用一个服务器。
      

  9.   

    我不是太懂,不知道你说得session表是不是数据库里建的数据表。
    在php.ini中有两个变量,一个用来设定session最大存活时间,另一个用来设定垃圾收集时删除过期session的几率。每次执行session_start()时都会运行垃圾收集程序,这样就可以根据几率和存活时间删除过期的session。
    在多域名服务器中将session保存在数据库中我觉得应该是个不错的办法。
      

  10.   

    TOyh801216(艾奥利斯) ,我说的cookie是说在客户端要存储随机生成的那个ID,就像你使用php内置的session一样,在客户端不也是存储一个sessionID嘛~频繁读写数据库确实不好,所以后来的discuz论坛就出了延迟更新的技术,就是说隔一段时间更新一下数据表。我只是说说大体思路嘛,如果你觉得不对,不合你胃口,你也可以找点别的办法啊~嘿嘿到时候可别忘了共享。^_^
      

  11.   

    我觉得我回答的完全可以解决你的问题吧???服务端生成随机字符串作为数据表中的每个session记录的标识,然后将标识保存在客户端,这样,无论你跳到哪个服务器,你的session是记录在同一台数据库服务器上的,我刚才说的,将cookie的domain设置未.test.com就可以允许test.com下的所有二级域名访问。
      

  12.   

    哎,还是没有得到我想要得。 nuying117(Danny):我这篇开始的时候那3种方法你看到了么?其中第二种就够了。当然要是统计会员在线情况,加个表,记录相关信息什么的哪个老大能给讲讲利弊,和具体实现细节。
    就比如如果有个再现会员表,或者session表。删除超时纪录并不是delete
    而一般是采用 
    if(rand(0,9)==1){
    delete
    }
    来完成的。诸如此类,大大们都给点经验之谈阿。当然主要问题还是重点:)
      

  13.   

    还是重复下我的问题吧:1 同一个网站的主域名和二级域名公用session问题。(例如:www.test.com和aaa.test.com,bbb.test.com ...)
    下面是我能想到和知道的方法:  (1)session + 给每个域名设置cookie? (这个方法好像要有探出窗口,而且需要等待哦)
       (2) session + 给全部域名设置cookie?(用什么方式?test.com好像不行,听说用.test.com)
      (3)session + session表(这里有个问题,客户端窗口一关闭,再打开的时候如何自动登陆呢session表里记录什么去判断请求来源呢?网卡物理地址?还是什么?)另外指出的是:针对多web服务器负载平衡,以及多数据库服务器的情况下,什么样的方法好些(估计方法(2)比较常用了,或者再加上session表),哪位老大能给具体说说,也好让小弟们学学。(我觉得只知道该这样做没啥用...)
      

  14.   

    还有个问题啊,
    访问每个域名的时候都注册了一个session的。
    登出的时候,如何全部destroy?
      

  15.   

    ..........
    nuying117(Danny) ,胡搅蛮缠!勿扰