问题描述:
asp。net
采用sessionID放在URL中的模式,如果session过期后,当用户还是用原来过期的sessionID放在URL中
访问服务器时,服务器会自动接受这个sessionID,并就将这个sessionID作为新对话的id。
例如:
一个过期的sessionID是rm1bdu55wfvfubza1u0fo0ua,用户重新对服务器请求,发出链接为
http://localhost/(rm1bdu55wfvfubza1u0fo0ua)/1.aspx,服务器会判断出是一个新的会话,并为这个
会话分配的id就是rm1bdu55wfvfubza1u0fo0ua,现在要求:
当服务器发现用户是开始一个新的会话时,不管用户url中是否发出了sessionID,都重新分配一个新的没有使用过的
sessionID为这次对话使用,
说明,不能使用cookie。

解决方案 »

  1.   

    我曾经尝试在Session_Start事件中,获取用户请求的RUL来判断URL中是否包含了sessionID,
    结果另人失望的是,获得的URL中始终不会有sessionID出现,例如用户发的请求是
    http://localhost/(rm1bdu55wfvfubza1u0fo0ua)/1.aspx,而通过Request.URL获得的却是
    http://localhost/1.aspx,郁闷.
      

  2.   

    居然没有一个人发表点意见,很久没上csdn,这里人气这么差了!!!!!
      

  3.   

    使用旧ID有什么用呢?
    SESSION里的数据已经被清理掉了.无所谓啊...
      

  4.   

    如果不更新id,可能导致2个人同时使用同一个id,服务器并不知道是不同的2个人.
      

  5.   

    1 前提是过期的SESSIONID 即使重用也没关系.
    2 如果有一个人用了SESSIONID 那么,就不存在SESSIONID过期这一说.3 要防止冒用SESSIONID 那么可以在生成SESSIONID时,加上客户端IP 客户端agent 等信息进行设置.
    有这两点基本上可以滤掉大部分情况了.但对于同一内网,的情况,需要再做架构设计.
    如SESSION初始化时,设置COOKIE(禁用COOKIE)时,可以在GET里加上一个随机数,这个数一值伴随SESSIONID 以验证SESSIONID.
    当然,别人分析出了你的随机数,理论上,也存在冒用SESSION的可能性....
      

  6.   

    自己已经搞定,每次能够判断用户是否是第一次登陆,然后另外给他一个新的session id,
    关键点,利用asp.net的规定,当访问的地址是绝对地址时,重新分配sessionID这个特性,
    巧妙实现每次用户登陆,绝对是新的未分配过的对话.