现在碰到这种问题:有一个系统放在外网需要登陆进去,登陆后用户名会保存在SESSION中。
    有两台电脑,用代理服务器上网访问该系统,有甲、乙两个用户分别通过这两台电脑访问系统并登陆。现在问题来了,假设甲以用户“user1”先登陆系统,这时甲就一直以“user1”的身份在系统中进行操作,可是当乙在另一台电脑上以“user2”登陆系统后,甲的SESSION就有变化,变成"user2"了 这是为什么?跟他们用代理服务器上网的这种上网方式有关吗? 
该系统在别的地方测试没有发生过此情况,望各位XDJM帮忙解决这个问题,谢谢了。

解决方案 »

  1.   

    从你的描述看,对Session的实现机制不是很清楚,呵呵所谓Session其实只是服务器端存放每个客户信息的一个容器(可以用Hashtable之类的东西实现),每个Session都有一个唯一的id对应,这个ID会在客户端和服务器不断的传送(URL重写方式),id包含在除了第一次请求外的所有请求中(只要客户端支持Cookie,这个最常用)。一个用户第一次访问页面的时候,如果服务器无法取得客户端送上来的sessionid,或者取出的id无法找到对应的Session(表示已经超时),就新生成一个Session,并把id返回给客户端,客户端每次都会带上来。能找到保存在Session中的用户名User,首先要保证的Http请求中的SessionId能找到这个Session,你的情况就是找不到对应的Session。你可以做试验,打印SessionId,对比你的清楚看看,在第二个用户登陆后,第一个用户的sessionid是否已经变化,如果变化就不对,或者和用户二的sessionid一致,这就是代理的问题了(这个也可以作为攻击的手段之一的^_^)
      

  2.   

    当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),
        可能是代理服务器认为是同一个客户端.用楼上的可以测试.