我现在在用asp.net做一个省级的系统软件,用的cookie做的登陆,设置cookie的过期时间是10分钟。但是发现一个问题,如果开着网站10分钟无人操作,cookie的确过期了,需要重新登录。但是把网页关了,再过很久再去浏览页面,cookie还存在,不用登录就可以进入系统。现在想要的效果是,cookie仍然设置过期时间,但是用户关闭页面时也要把cookie注销掉。我找了下,没有发现又 页面关闭之前的 的事件,请问下大虾们怎样才能实现这样呢?

解决方案 »

  1.   

    设置一个没有时间的COOKIE即可.关闭窗口就自动删除了.
      

  2.   

    同上,默认的Cookies没有时间限制的都是加载在内存中的,浏览器一关就没了  
       
      如果希望增加时限就会自动存储到缓存中,产生一个文本文件
      

  3.   

    页面关闭事件? 在 Global.asax 这个里面写
      你新建一个Global.asax 看看里面的事件
      

  4.   

    5楼的这个做法还可以。不过我又想到了一些问题。假如页面或者浏览器非正常关闭了怎么办?比如说直接关电脑了,或者断电了,或者内存的问题导致浏览器退出,这样都不会去执行这个注销cookie的事件。
      

  5.   

    如二楼所说:不对cookies进行时间设置,默认它就是随浏览器关闭而结束的,即使是你断电或其他原因导致浏览器关闭,cookies也会自动消失。如果你只是为了达到10分钟用户退出的需求,那就直接用session不就能很好的实现了吗?
      

  6.   

    补充:
    如果用户禁用了cookies怎办?而且不管你加密与否,将用户关键数据保存在客户端也不安全。用SESSION吧,废不了你多少服务器资源
      

  7.   

    Response.Cookies["User_Name"].Expires = DateTime.Now.AddDays(-1);//你的cookies
                Request.Cookies["User_Name"].Value = "";
                Response.Cookies.Clear();
                HttpCookie aCookie;
                string cookieName;
                int limit = Request.Cookies.Count;
                for (int i = 0; i < limit; i++)
                {
                    cookieName = Request.Cookies[i].Name;
                    aCookie = new HttpCookie(cookieName);
                    aCookie.Expires = DateTime.Now.AddDays(-1);
                    Response.Cookies.Add(aCookie);
                }
      

  8.   


    <script type="text/javascript">
            function window.onbeforeunload() {
                if (event.clientX > 360 && event.clientY < 0 || (event.altKey)) {
                    window.onbeforeunload = null;
                    window.open("logout.aspx");       
        }
    }
    </script>可以直接在上面的js函数if里删除cookie的脚本,也可打开一个我们退出的页面.
      

  9.   

    看了你的说明,要求,我觉得还是如上面所说
    不设置cookie的过期时间,页面关闭,cookie就自动清除。