我的程序里一直要有个用户信息,所以在登陆页面转到主页面时,加了session["userid"]信息。同时为防止用户跳过登陆,在主页面的page_load函数里加了session["userid"]的判断,如果session["userid"]为空,则退到登陆界面。因为session["userid"]有生命周期,有时我关了浏览器,然后再打开,还是会跳过登陆界面进入主页,所以我在page_load函数里把session["userid"]赋给另一个session["userid_2"],然后登陆完后直接删掉session["userid"]。
    问题来了,如果刷新的时候,也是会跳到登陆界面。这该如何是好?
    网上的js判断是刷新还是关闭的程序也没用,百撕不得骑姐。
    沙发10分。刷新不退出登陆session界面浏览器

解决方案 »

  1.   

    “有时我关了浏览器,然后再打开,还是会跳过登陆界面进入主页”
    如果是多标签页浏览器,要关掉整个浏览器进程session才会失效(cookie中的sessionID的有效期是“会话”)首先这一点就是不科学的其次你弄一个userid_2是想干啥。。既然都在session里面,session失效的时候俩都不在了其实你完全没有必须搞这么复杂,直接说想要的需求吧。如果不做任何处理,登录后不关闭浏览器重新打开,点刷新是不会要求重新登录的(session没有失效)
      

  2.   

    刷新与关闭本就不好判断
    你完全多此一举,就原来的方式就行了,关闭浏览器后session会立即失效的,除非还有其他窗口没关;如果没过期,就不用登陆没什么不合理的;一般来说,提供一个手动退出的按钮就行了,用户安全意识强要求高的话可以退出后再关闭浏览器
      

  3.   

    A:登陆页面
    B:主页业务逻辑
    A登陆成功 则可以访问BA:访问 如果有登陆信息则进入B
    B:访问  如果没有登陆信息进入A
      

  4.   

    所言极是。其实我的需求就是用户关闭浏览器后,再打开主页网址是要重新登陆的,但刷新则不用。设置userid_2也是想着在用户登陆进去后就立即手动删除userid,这样用户关闭浏览器,即使session会话没过期,也要重新登陆,看来这个需求是不怎么合理。但一般用户登陆的界面就是这样做的吗?另,在浏览器还没关闭的时候,比如过了2个小时,session会不会过期?如果过期那如何访问session中存储的用户ID呢?
      

  5.   

    所言极是。其实我的需求就是用户关闭浏览器后,再打开主页网址是要重新登陆的,但刷新则不用。设置userid_2也是想着在用户登陆进去后就立即手动删除userid,这样用户关闭浏览器,即使session会话没过期,也要重新登陆,看来这个需求是不怎么合理。但一般用户登陆的界面就是这样做的吗?另,在浏览器还没关闭的时候,比如过了2个小时,session会不会过期?如果过期那如何访问session中存储的用户ID呢?
    这么说吧,普通网站的登录一般是这样:登录后存入session,关闭浏览器或者默认时间内无操作(没有发向服务器端的请求)则需要重新登录,如果要做“记住我”或者“两周内免登陆”的功能,就要存登录信息(最好加密一下)到cookie里面,session失效时判断cookie中是否有信息。如果想做到开着网页刷新的时候永远不到重登陆,你可以在每个页面都搞个轮询的AJAX请求公共JS,可以什么都不干,只是向服务器端发个请求,间隔时间比session失效的时间短就行了,以这样手动的方式让session的有效时间滑动加长。