当前位置: 代码迷 >> ASP.NET >> |M| 怎么让一个Cookies的过期时间和Session["Login"] 过期一样
  详细解决方案

|M| 怎么让一个Cookies的过期时间和Session["Login"] 过期一样

热度:4779   发布时间:2013-02-25 00:00:00.0
|M| 如何让一个Cookies的过期时间和Session["Login"] 过期一样
如我的系统设计Session的过期时间为20分种
然后我登录的时候用Session[ "Login "]   来记录当前登录的是谁
还有用一个Cookies[ "Login "]   来记录登录的是谁
这个Cookies的过期时间设置和Session过期的时间一样
但问题是:
当用户登录的时候记录下了Seesion和Cookies,但在程序运行时我们如果有对
Session[ "Login "]进行读写的时候他的过期时间会延长
而Cookies并不能延长
所以就会造成Cookies过期了但Session还没有过期的问题
问:如何让一个Cookies和相应的Session的过期时间一样

------解决方案--------------------------------------------------------
那楼主不是用两个Session不就好了..
------解决方案--------------------------------------------------------
你可以把Cookies设置的长一些
然后在Session过期的时候清除Cookies
------解决方案--------------------------------------------------------
在Session时间更新的时候 ,顺便修改一下Cookie的过期时间就可以了
------解决方案--------------------------------------------------------
那就在程序读写的时候重新设置一下cookie的过期时间。

------解决方案--------------------------------------------------------
up
------解决方案--------------------------------------------------------
你这个设计好像有点问题,你这样搞的cookie跟session一模一样的功能,那还不如直接用session就好了,干嘛还要用cookie了。cookie本来就是在客户端保存信息的,和session实现的功能完全不一样,为什么一定要把2个搞成一样了。
------解决方案--------------------------------------------------------
问:如何让一个Cookies和相应的Session的过期时间一样
---------------------
这样其实也不太可能,比如都是20分钟过期,但客户关闭浏览器,那session马上就没了,不用等20分钟,但cookies不会关闭浏览器就没了
------解决方案--------------------------------------------------------
同意AK兄的意见!
------解决方案--------------------------------------------------------
up~!
------解决方案--------------------------------------------------------
问:如何让一个Cookies和相应的Session的过期时间一样
---------------------
这样其实也不太可能,比如都是20分钟过期,但客户关闭浏览器,那session马上就没了,不用等20分钟,但cookies不会关闭浏览器就没了


=============

Session会等 20分钟的,这个我测试过
------解决方案--------------------------------------------------------
这样其实也不太可能,比如都是20分钟过期,但客户关闭浏览器,那session马上就没了,不用等20分钟,但cookies不会关闭浏览器就没了
============================================

当客户关闭浏览器,并不是Session马上就没了,Session是存放于服务器端的,并不会因为客户端关闭浏览器的操作而销毁。当客户端第一次访问Web服务器的时候,服务器会给用户分配一个SessionID,这个SessionID是存放于客户端浏览器进程中的。这就正如你去银行取钱,钱是在银行(服务器端),但你总的有个标识(客户端存放的SessionID),当客户端关闭浏览器的时候,再打开浏览器,Web服务器会给客户一个新的SessionID,所以虽然服务器端的Session对象没有销毁,但我们已经无法去使用它了,只能等着它因为超时而销毁。
------解决方案--------------------------------------------------------
LS回答精辟.
------解决方案--------------------------------------------------------
mark
------解决方案--------------------------------------------------------
每一次进行session[ "Login "]读取时,当Session 如果没丢失,取值成功的时候,就给cookie的有效时间从新设置下,这样只有Session丢失后一段时间,cookie 自动丢失
------解决方案--------------------------------------------------------
每次请求,更新目标的过期时间,如在 Application_Start 中

// may be ->

HttpCookie cookie = Request.Cookies[ "MyCookieName "];
cookie.Expires = DateTime.Now.AddMinutes(Session.Timeout);
Response.Cookies.Set(cookie);

------解决方案--------------------------------------------------------
需要明确的是,

只要服务器接受了某个客户端的请求,不管此次请求,有没有 【读/写】Session, Session 的过期时间都会被重置
------解决方案--------------------------------------------------------
可以用Cache解决
Cache对象的依赖项取Session对象
Session过期Cache失效,这时用一个方法也使Cookie过期
------解决方案--------------------------------------------------------
技术上,我就不说了,网上有太多的文章了。

我说一些费话。

一个用户(A),他有正确的账户名和一个正确的密码,他算不算是合法用户??我想算吧。
  相关解决方案