asp.net中的cookie和会话
本文关键字:会话 cookie 中的 net asp | 更新日期: 2023-09-27 18:05:55
我正在创建一个登录,并使用以下代码将用户详细信息存储在cookie中
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);
}
我也正在创建一个会话会话。Add("useremail txtUserName.Value);身份验证成功后,它被重定向到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值给用户。这样我就可以把这个值传递给gridview函数
把它改成
protected void Page_Load(object sender, EventArgs e)
{
if (Session["useremail"] == null)
Response.Redirect("Home.aspx");
else
BindGridView((string)Session["useremail"]);
}
您可以像这样添加一个对象到会话状态:
Session["useremail"] = "john.smith@microsoft.com";
然后您可以通过以下方式检索它:
var useremail = Session["useremail"] ?? null;
if (useremail == null)
{
//...
}
else
{
BindGridView(useremail);
}
如果会话状态中不存在useremail项,则useremail变量将被设置为null,否则它将包含电子邮件地址
您正在混淆身份验证,会话状态和cookie之间的关系。在ASP。. NET、Session State和Forms Authentication没有链接,也就是说它们的作用域是不同的。您可以为未经身份验证的用户设置一些会话状态。会话和表单身份验证使用不同的cookie进行跟踪,cookie管理或多或少是自动的,您不需要像以前那样编写代码来管理它。此外,您在cookie中存储的内容与会话状态中的内容无关。在没有cookie的情况下,也可以同时使用会话和表单认证。因此,下面的代码应该适用于会话状态
Session["key"] = "put your data here";
// retrieve the data elsewhere
var data = Session["key"];