V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
firhome
V2EX  ›  程序员

你们是怎么解决session过期的?

  •  
  •   firhome · 2013-09-26 13:40:45 +08:00 · 9457 次点击
    这是一个创建于 3865 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用户长期不操作,如果session过期,刷页面的时候跳转到登陆页面..但是如果点击ajax请求数据..就不行了.

    1种是ajax的时候做判断,难道要在全局的ajax函数都加上判断?

    2是前端页面定时器..

    不知道你们怎么做的?
    16 条回复    1970-01-01 08:00:00 +08:00
    bosiam
        1
    bosiam  
       2013-09-26 14:02:03 +08:00
    当然是请求的地址会自动做判断,是否有权限、是否登录
    CoX
        2
    CoX  
       2013-09-26 14:05:49 +08:00
    接收ajax请求的页面做判断,给相应的返回状态
    tabris17
        3
    tabris17  
       2013-09-26 14:09:28 +08:00
    不理解你到底在纠结哪个,究竟是要防止session过期,还是ajax中如何处理非法请求

    前者,最简单的方法,页面内嵌iframe,定时刷新。
    后者,ajax请求返回错误状态,前端根据不同错误状态做出响应
    msg7086
        4
    msg7086  
       2013-09-26 14:10:12 +08:00
    为什么不延长session过期时间?
    cxe2v
        5
    cxe2v  
       2013-09-26 14:21:13 +08:00
    @msg7086 延长个啥?人家用ajax刷新多久你能预估到?
    Mutoo
        6
    Mutoo  
       2013-09-26 14:24:49 +08:00
    为啥要内嵌iframe,ajax做一个心跳同步,就可以一直保持session了
    ejin
        7
    ejin  
       2013-09-26 14:27:28 +08:00
    以前专门看过大网站怎么做的,一般是定时发送个请求以保证只要页面没关掉就不会失效,当然ajax部分还是要判断下的。

    二者缺一不可

    这是以前的解决方案,现在嘛,没太注意了,不过要兼容以前浏览器的话还是这个方案比较好
    YuHong
        8
    YuHong  
       2013-09-26 14:31:23 +08:00   ❤️ 1
    后端 statusCode 返回 401
    前端针对 xhr 做个全局的request control
    例如jQuery $(document).ajaxError(req, xhr) { if(xhr.status === 401) // do something}
    bombless
        9
    bombless  
       2013-09-27 10:01:47 +08:00
    不知道楼主的意思是保证ajax让前端正确的跳到失效的界面,还是说在ajax时保持一个登陆状态。
    失效的话就让ajax返回401,前端收到之后就知道过期了。保持登陆状态的话真没什么好谈的,感觉不是一个问题。
    horsley
        10
    horsley  
       2013-09-27 10:07:19 +08:00
    cookie 回填session
    zebinary
        11
    zebinary  
       2013-09-28 08:11:55 +08:00
    lz的意思应该是ajax请求发现过期,需要js控制来进行跳转,这个代码如何统一吧。这个封装一个统一的ajax函数就好了。
    msg7086
        12
    msg7086  
       2013-09-28 09:07:52 +08:00
    @cxe2v session又不是一定要过期。
    如果你需要让session不过期,那直接把session过期时间改为无限长不就得了。
    这和ajax有什么关系?

    扯到ajax的我只能想到的是用户在另一个页面手动登出以后再回来执行ajax的情况。
    这种时候可以根据ajax请求的header标示直接返回一个特定的错误码json让前台处理就行了。
    cxe2v
        13
    cxe2v  
       2013-09-28 10:43:55 +08:00
    @msg7086 哈哈,你不过期是打算一直耗着服务器资源吗?当然你做小站的可以一直不过期,不过对于需要性能的网站来说,不过期还真不行
    msg7086
        14
    msg7086  
       2013-09-28 14:13:08 +08:00
    @cxe2v 如果从需求上就要求session不过期的话,我觉得应该是要花精力去解决session耗资源的问题……
    liunkor
        15
    liunkor  
       2013-09-28 15:59:21 +08:00
    可以设置时间啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   955 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:21 · PVG 04:21 · LAX 13:21 · JFK 16:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.