我想用cookie做一个用户登录,但是cookie没有session那样有自动会话功能,即会话过期了就自动回到登录页面。
这样就导致了我每从cookie里面取一个值就要判断cookie有没有过期了,如果过期了就得回到登录页面以防止出错。
我的取cookie是用这种方法取的:
        public static string GetUserName 
        {
            get 
            {
                HttpCookie cookie = HttpContext.Current.Request.Cookies["PerInfo"];
                if (cookie != null)
                {
                    return cookie.Values["UserName"].ToString();
                }
                else
                    return null;
            }
        }
我想把else里面的语句换成一旦cookie为null就转向登录页面,但是这个方法规定了必须返回一个类型,如果自动转向页面就没有返回值会调试不过去。如果按照我写的方法就是我取出了这个值但是在回到那个页面后还是要判断if(cookie==null)则转向登录页面,如果不空再继续执行,这个样子判断很烦,页面很多的话很容易会漏写,请高手们帮我想个方法即在方法里面实现判断后转向问题,或者帮我另外设计一个实现方式,谢谢

解决方案 »

  1.   

    COOKIE可以设置过期的呀啊,只是不能直接做到象SESSION那样平滑过期而已(就是说,当会话在一定时间内持续时,会话依然有效,否则过期),不过你可以自己写个方法什么的,将指定的COOIKE设为固定的过期时间(就象SESSION的有效时间),当会话继续时,将COOKIE延长过期时间,这样,当用户持续时,COOKIE就长久有效,否则过了有效时间就被删。
      

  2.   

    我设过了,设了1分钟,在登录判定的页面设了,之后确定取出来的cookie为空,但是它为空了没有回到登录,还是往下执行了                
    HttpCookie cookie = new HttpCookie("PerInfo");
    cookie.Values.Add("UserID", strValue[0]);
    cookie.Values.Add("UserName", strValue[1]);
    cookie.Expires = DateTime.Now.AddMinutes(1);
    HttpContext.Current.Response.AppendCookie(cookie);
    HttpContext.Current.Response.Redirect("main.aspx");
      

  3.   

    asp.net 2.0 有新特性 配webconfig
    webconfig中
    <!-- 需要登录才能访问 -->
      <location path="member/myMealsee">//path里面指定你要登陆后才能访问的文件夹 比如把需要登陆才能访问的页面放在了member/myMealsee文件夹下
        <system.web>
          <authorization>
            <deny users="?" roles="restaurant" />//拒绝所有匿名用户 只有角色是restaurant的用户才能访问
          </authorization>
        </system.web>
      </location>
      <location path="member/restaurant">同上
        <system.web>
          <authorization>
            <deny users="?" roles="person" />同上
          </authorization>
        </system.web>
      </location>登陆页面后台登陆成功后调用下面的方法
    比如 setlogincookie("登陆成功的用户名","person")   private void SetLoginCookie(string username, string roles)//这是一个寸角色名的方法
            {
                //建立身份验证票对象
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddMinutes(30), false, roles, "/");
                //加密序列化验证票为字符串
                string hashTicket = FormsAuthentication.Encrypt(ticket);
                HttpCookie userCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);
                //userCookie.Expires = DateTime.Now.AddDays(999); //设置cookie过期时间
                HttpContext.Current.Response.Cookies.Add(userCookie);        }最后 如果你其他页面需要调用当前登陆ID的话 只需要用 page.user.identity.name 就能找到了
      

  4.   

    楼主换一下结构不行吗?if   else if ...
      

  5.   

    具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持。cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力.
    而session机制采用的是一种在客户端与服务器之间保持状态的解决方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的。而session提供了方便管理全局变量的方式
    session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器。
    就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的SESSION机制更安全些.因为它不会任意读取客户存储的信息。
    JAVA手机网[www.cnjm.net]
    正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie
    JAVA手机网[www.cnjm.net]从网络服务器观点看所有HTTP请求都独立于先前请求。就是说每一个HTTP响应完全依赖于相应请求中包含的信息
    状态管理机制克服了HTTP的一些限制并允许网络客户端及服务器端维护请求间的关系。在这种关系维持的期间叫做会话(session)。
    Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies
    这是在网上找的!大家看一下啊!好像里面出了几个JAVA字眼!嘿嘿!凑合一下吧!这是我第一次在论坛发言,以前都是人家散分时,我才出来,没办法技术不行啊!以后大家多多指教啊!
      

  6.   

    前面漏了点东西 不好意思
    在webconfig中的system.web节点里 还要加一段
    <authentication mode="Forms">
            <forms name=".ASPXAUTH" defaultUrl="index.aspx" loginUrl="/member/login.aspx" protection="None" timeout="60" />
    </authentication>loginUrl="/member/login.aspx" 这里的意思是如果你没有登陆就访问那些需要登陆后才能访问的页面的话 就会跳转到这个登陆的地址