2011-08-17 57 views
0

我创建一个登录和使用此代码Cookies和会话在asp.net

if (ValidateUser(txtUserName.Value,txtUserPass.Value)) 
{ 
    //string useremail = Convert.ToString(txtUserName.Value); 
    Session.Add("useremail", txtUserName.Value); 
    FormsAuthenticationTicket tkt; 
    string cookiestr; 
    HttpCookie ck; 
    tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now, 
    DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data"); 
    cookiestr = FormsAuthentication.Encrypt(tkt); 
    ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr); 
    if (chkPersistCookie.Checked) 
    ck.Expires=tkt.Expiration; 
    ck.Path = FormsAuthentication.FormsCookiePath; 
    Response.Cookies.Add(ck); 
} 

的存储在cookie中的用户的详细信息,我也创建一个会话Session.Add(“USEREMAIL”,txtUserName。值); 成功的身份验证后,它被重定向到user.aspx 我想读取user.aspx页面中的useremail值,但是当我尝试访问用户页面中的值时,它不显示useremail字段。

protected void Page_Load(object sender, EventArgs e) 
    { 
     if 
      (Session["useremail"] == null) Response.Redirect("Home.aspx"); 
     else 

      BindGridView(useremail); 
    } 

这是我的webconfig:

<authentication mode="Forms"><forms name=".YAFNET_Authentication" loginUrl="Home.aspx" protection="All" timeout="43200" cookieless="UseCookies"/></authentication> 

纠正我,如果我做任何错误。也请告诉我如何将USEREMAIL值传递给user.aspx页面,这样我可以通过该值gridview的功能

+0

难道你不是指'BindGridView(Session [“useremail”] .toString());'? –

+0

是工作,谢谢 – rookie

回答

1

只是将其更改为

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Session["useremail"] == null) 
      Response.Redirect("Home.aspx"); 
     else 
      BindGridView((string)Session["useremail"]); 
    } 
+0

谢谢你,我使用此代码删除cookie,如果(Request.Cookies [FormsAuthentication.FormsCookieName]!= null) { HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName); myCookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(myCookie); } //FormsAuthentication.SignOut(); Response.Redirect(“Home.aspx”);但仍饼干是存在的,我能看到user.aspx页如何退出 – rookie

1

您可以将对象添加到会话状态是这样的:

Session["useremail"] = "[email protected]"; 

然后,您可以通过以下方式进行检索:

var useremail = Session["useremail"] ?? null; 
if (useremail == null) 
{ 
    //... 
} 
else 
{ 
    BindGridView(useremail); 
} 

如果项目“USEREMAIL”是不存在的USEREMAIL变量将被设置为null otherwhise它将包含电子邮件地址的会话状态。

0

你正在使用的身份验证,会话状态和饼干之间的关系混淆。 在ASP.NET中,会话状态和表单身份验证未链接,即其范围不同。您可以为未经身份验证的用户设置一些会话状态。会话和表单身份验证使用不同的cookie来进行跟踪,cookie管理或多或少是自动的,您并不需要编写代码来按照您的要求进行管理。此外,您存储在cookie中的内容与会话状态中的内容无关。它也可以使会话和表单身份验证无需工作的W/O饼干。所以下面的代码应该适用于会话状态

Session["key"] = "put your data here"; 

// retrieve the data elsewhere 
var data = Session["key"]; 
+0

感谢,我使用此代码删除cookie,如果(Request.Cookies时[FormsAuthentication.FormsCookieName]!= NULL){ HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName); myCookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(myCookie); } //FormsAuthentication.SignOut(); Response.Redirect(“Home.aspx”);但仍然存在cookie,我可以看到user.aspx页面如何退出 – rookie