我想模拟CSDN的“两周内不需要登陆”的功能,在login.aspx中有如下保存COOKIES的值的代码:Dim authTicket As FormsAuthenticationTicket
            If Me.CheckTime.Checked = True Then
                authTicket = New FormsAuthenticationTicket(1, stu_name, DateTime.Now, DateTime.Now.AddDays(14), false, role)
                'roles是一个角色字符串数组(),两周内不需要重复登陆
            Else
                authTicket = New FormsAuthenticationTicket(1, stu_name, DateTime.Now, DateTime.Now.AddMinutes(120), false, role)'只保存两个小时
            End If
            Dim encryptedTicket As String = FormsAuthentication.Encrypt(authTicket) '加密             '存入Cookie()
            Dim authCookie As HttpCookie = New HttpCookie("mycookies", encryptedTicket)
            Response.Cookies.Add(authCookie)...............................................................................我在另外的页面,就是需要用户信息的页面page_load事件中有如下代码:
  Dim authCookie As HttpCookie = Context.Request.Cookies("mycookies")
                If authCookie Is Nothing Then
                    Panel1.Visible = True
                Else
                    Dim authTicket As FormsAuthenticationTicket = FormsAuthentication.Decrypt(authCookie.Value)
                    Dim roles() As String = authTicket.UserData.Split("|")
                    Context.User = New GenericPrincipal(Context.User.Identity, roles)
                 ....
               end if...................................但是测试时并没有这个效果,只要我重新启动浏览器,就需要再次登陆,也就是我的cookies值没有保存...我的COOKIES为什么不能保存一定的时间呢??

解决方案 »

  1.   


        Sub Login_Click(sender As Object, e As EventArgs)
        ' Create a custom FormsAuthenticationTicket containing
        ' application specific data for the user.    Dim email As String         = UserEmail.Text
        Dim password As String      = UserPass.Text
        Dim isPersistent As Boolean = Persist.Checked    if Authenticated(email,password) Then          Dim userData As String = "ApplicationSpecific data for this user."       Dim ticket As New FormsAuthenticationTicket( _
            1, _
            email, _
            System.DateTime.Now, _
            System.DateTime.Now.AddMinutes(30), _
            isPersistent, _
            userData, _
            FormsAuthentication.FormsCookiePath)       ' Encrypt the ticket.
           Dim encTicket As String = FormsAuthentication.Encrypt(ticket)       ' Create the cookie.
           Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket))       ' Redirect back to original URL.
           Response.Redirect(FormsAuthentication.GetRedirectUrl(email,isPersistent))
        End If
        End Sub上面的就是在sdk里面的一段原封不动的代码。仔细看会发现。
    authTicket = New FormsAuthenticationTicket(1, stu_name, DateTime.Now, DateTime.Now.AddDays(14), false, role)
    这句的倒数第二个参数应该是根据Me.CheckTime.Checked的值来确定的。
      

  2.   

    CSDN的功能好使吗?我怎么觉得不好使
      

  3.   

    你的机器是否禁用了cookie?-------------------------------------------------------------------------
    .Net技术讨论群14272327,欢迎爱好c#和asp.net的同志加入~队伍正在不断壮大中...
      

  4.   

    这句的倒数第二个参数应该是根据Me.CheckTime.Checked的值来确定的。我分别用true 以及false做了测试。可以效果一样。我的机器没有禁用cookies,很有理由的一个事情就是我上CSDN,可以不需要每次都登陆。
    我的程序基本就是SDK翻版,没有什么区别。但是不知道为什么出问题。
    谢谢楼上的。
      

  5.   

    我检查了一下我的cookies文件夹,发现我自己做的COOKIES没有保存下来。但是CSDN的COOKIES保存下来了。清除掉所有COOKIES之后,依然如此。
    所以我只要关闭浏览器就需要重新登陆。
    为什么我的代码不能保存COOKIES?
      

  6.   

    If Me.CheckBox1.Checked = True Then
                    authCookie.Expires = DateTime.Now.AddDays(14)
                Else
                    authCookie.Expires = DateTime.Now.AddMinutes(60)
                End If
                Response.Cookies.Add(authCookie)
    增加了这个OK了。谢谢楼上的。