ASP.NET如何一起使用SESSION和Cookies?

时间:2010-02-22 16:56:22

标签: asp.net session cookies

我想在我的网络应用程序中使用会话对象。我也想存储一些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

4 个答案:

答案 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;
    }