当然是这样的,session用于保存用户的私有信息,只对当前的浏览器进程有效。

解决方案 »

  1.   

    用了session之后再给用户在数据表中加一个最后活动时间,如果最后的活动时间在最近几分钟内就不允许登录应该就可以了,然后在每个登录的页面用meta进行更新最后活动时间。
    这样就可以实现同一样用户不允许同时登录的现像了,我是这么做的
      

  2.   

    对于这个问题我有考虑。最好的方法是把session数据存放到数据表中。登录验证的时候根据用户id来检查是否有已登录的session数据,若存在已登录而且没超时的记录就拒绝登录,if超时就更新数据。因为session数据是自动更新的,登录以后每次调用session都会更新一下session的生存期,所以不会出问题。
    至于session的数据库存取,可以查看最新英文php手册关于session_set_save_handler的介绍,写一个自己的session处理函数。也可以搜一下现成的类,不过有的地方要自己修改,别人写的类里面没有用户id字段,一般只有session_id exp_time session_data 三个字段,只要稍微修改就可以。
      

  3.   

    如果楼主想禁止多人同用一个帐号登陆,可以这么考虑.
    1、在验证用户名和密码的表中加入一字段,表示登陆状态。假设数值1为已
    登陆,为0则未登陆。
    2、在用户登陆时同时判断该用户名的登陆状态是否为已登陆,如为已登陆
    则禁止登陆。
    3、用户正常退出的时候,将用户登陆状态改为未登陆。
    4、考虑到会有用户不使用正常退出方法。楼主可在首页上加一段程序,检查
    所有SESSION(这要求楼主在写程序的时候选设定一个SESSION PATH),用户
    最后行动时间是否超过30分钟(或自己定个时间),如超过,则将该用户名
    的登陆状态改为0。个人建议,供楼主参考
      

  4.   

    定时刷新也是个办法,但是如果用户禁止meta refresh的话就失效。
    php默认的session save handle是file,可以在临时目录找到这些临时文件,缺点是没有全局变量,session里的数据是独力的。
    其实研究一下ipb论坛程序的数据表就能看出,ipb也是利用数据表来存取session数据的,研究一下它的session机制就不难完成这个任务。数据表存取session的缺点可能就是性能了,如果登录太多人,数据库能否承受?就看你如何优化了,呵呵
      

  5.   

    我用PHP写的存取session变量的程序,单独运行没有任何错误,可是把这个程序放入frame(框架文件中)运行会出错,为什么?我应该如何解决?
      

  6.   

    那就不要放入frame,那些大型的网站很少用frame的。
    还有设置
    session.cookie_domain = 你的域
    可以解决这个问题
      

  7.   

    不是吧?我觉得session不可能两个无效的啊。楼主刷新前面的ie看看,肯定发生变化,也变成后面新注册的session了吧?
      

  8.   

    不是已经说了吗?“session用于保存用户的私有信息,只对当前的浏览器进程有效”
    换句话说就是:别人是看不到我的session的
    所以仅用session是不能达到你的目的的,你要用Application而不是session才能达到目的
    鉴于php并无Application,所以请考虑采用 lzkd(浪子快刀) 的方案
      

  9.   

    www.notle.net
    你打开一个窗口,用一个用户名登陆以后,再打开新窗口,重新注册一个帐户登陆,然后刷新前者的窗口,前者也会变成后者的窗口。注:该站用session保存用户名密码。
      

  10.   

    to zairwolf
      
      有道理,不过,进入主页面时,没有问题,即第一次进入没问题,调用不包含session 的PHP网页是的可以的,一用含session 的就不能用错误如下:
    Warning: session_start(): open(session/\sess_e934e59ab54d3d6ad191ec709b415169, O_RDWR) failed: No such file or directory (2) in H:\Apache2\htdocs\student\stud_info.php on line 3Warning: session_start(): Cannot send session cookie - headers already sent by (output started at H:\Apache2\htdocs\student\stud_info.php:3) in H:\Apache2\htdocs\student\stud_info.php on line 3