我想在我的网络应用程序中使用会话对象。我也想存储一些cookie(一些自定义信息)。如何在不修改URL的情况下使用两者 http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx
在我的ASP.NET页面中, 我正在设置一些会话变量
Session["customerId"]="Some name";
然后我想在cookie中设置一些值
HttpCookie objCookie = new HttpCookie("vendorName");
Response.Cookies.Clear();
Response.Cookies.Add(objCookie);
objCookie.Values.Add(cookiename, "ATT");
DateTime dtExpiry = DateTime.Now.AddDays(2);
Response.Cookies[cookiename].Expires = dtExpiry;
在这个页面中我现在可以访问sesion变量值,但是当我被重定向到另一个asp.net页面时,我没有得到我的会话值。它似乎被丢失了。
任何想法如何解决这个问题。我想要会话和cookie
答案 0 :(得分:4)
Cookie和会话变量彼此独立。您可能会感到困惑,因为默认情况下,Asp.Net会话使用cookie来存储会话标识符,并且当禁用cookie时,Asp.Net会将会话标识符放在URL中可见的查询字符串值中。
使用cookies执行此操作
// Set the value in a response
Response.Cookies["SomeCookieVar"].Value = "SomethingImportant";
// After a post back read the value from the request
Request.Cookies["SomeCookieVar"].Value;
会话变量可以像这样访问
// Set the value
Session["SomeSessionVar"] = "SomethingElse";
// Read the value
String SomeSetting = Session["SomeSessionVar"];
这假设您正在使用C#inside和ASPX页面类。 VB.Net的语法略有不同,http处理程序和模块要求你做一些工作来获取Request,Response和Session。
会话变量和Cookie值可以混合并与您的内容匹配,而不会产生任何冲突。一种常见的情况是将值存储在您希望持久化不同会话的cookie中。但为了使其起作用,您必须在cookie上设置过期时间。没有过期的Cookie是非持久性的,不会在浏览器会话之间持续。
// make the cookie to last for a week
Request.Cookies["SomeCookieVar"].Expiration = DateTime.Now().AddDays(7);
答案 1 :(得分:1)
我认为你的问题可能是这个
Response.Cookies.Clear();
如果清除所有cookie,您将清除ASP.Net用于存储会话标识符的cookie。如果没有该cookie,ASP.Net就无法将用户Session与后续请求挂钩,因此会话将丢失。
答案 2 :(得分:0)
您可以考虑使用这个小库:
http://www.codeproject.com/KB/aspnet/Univar.aspx
只要cookie不可用,它就会自动切换到会话。它还具有cookie的服务器端实现,其中所有cookie都存储在服务器上,并且asp.net认证可用于识别用户。
答案 3 :(得分:0)
protected void btnSend_Click(object sender, EventArgs e)
{
// declaring a HttpCookies here with a Parameter
HttpCookie Cookies = new HttpCookie("Name");
//Clearing the Cookies
Response.Cookies.Clear();
// Set a value in it.
// here the Cookies object act like a type and inside the'[" "]' is a Cookie's variable
Cookies["ID"] = txtID.Text;
Cookies["MyName"] = txtName.Text;
Cookies["Contact_No"] = txtContactNo.Text;
Cookies["EmailID"] = txtEmailID.Text;
// Add it to the current web response.
Response.Cookies.Add(Cookies);
//Setting the Exparation Date For he Cookies
HttpCookie Cookies1 = new HttpCookie("Expiration");
Cookies1.Expires = DateTime.Now.AddDays(-1);
//Redirecting to another page
Response.Redirect("Accepting_Cookies_Details.aspx");
}
//转到您要检索Cookie值的目标网页
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie Cookie = Request.Cookies["Name"];
string ID1 = Cookie["ID"];
string MyName1 = Cookie["MyName"];
string Contact_No1 = Cookie["Contact_No"];
string EmailID1 = Cookie["EmailID"];
Literal1.Text = ID1;
Literal2.Text = MyName1;
Literal3.Text = Contact_No1;
Literal4.Text = EmailID1;
}