ASP.NET Как использовать SESSION и Cookies вместе? - PullRequest
0 голосов
/ 22 февраля 2010

Я хочу использовать объект сеанса в своем веб-приложении. Я также хочу сохранить некоторые файлы 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, я не получаю значения сеанса там. Похоже, что она теряется.

Есть идеи, как это решить. Я хочу и сессию, и куки

Ответы [ 4 ]

4 голосов
/ 22 февраля 2010

Файлы cookie и переменные сеанса не зависят друг от друга. Вы можете быть сбиты с толку, потому что по умолчанию сеансы Asp.Net используют cookie для хранения идентификатора сеанса, а когда cookie отключены, Asp.Net помещает идентификатор сеанса в значение строки запроса, которое видно в URL.

Чтобы использовать куки, сделайте это

// 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 # и класса страниц 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 голос
/ 22 февраля 2010

Я думаю, что ваша проблема может быть в этом

Response.Cookies.Clear(); 

Если вы удалите все файлы cookie, вы очистите файл cookie, который ASP.Net использует для хранения идентификатора сеанса. Без этого файла cookie ASP.Net не сможет подключить пользовательский сеанс с последующими запросами, поэтому сеанс будет потерян.

0 голосов
/ 30 мая 2013
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;
    }
0 голосов
/ 26 марта 2010

Вы можете рассмотреть возможность использования этой маленькой библиотеки:

http://www.codeproject.com/KB/aspnet/Univar.aspx

Может автоматически переключаться на сеанс всякий раз, когда cookie недоступен. Он также имеет реализацию куки на стороне сервера, в результате чего все куки хранятся на сервере, и аутентификация asp.net может использоваться для идентификации пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...