2010-02-22 3 views
0

Я хочу использовать объект сеанса в моем веб app.I хотите сохранить некоторые печенья слишком (Некоторые пользовательские сведения) .Как я могу использовать как без URL не модифицированном как http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspxASP.NET Как использовать SESSION и Cookies вместе?

В моей странице ASP.NET , я устанавливаю некоторые переменные сеанса

Session["customerId"]="Some name"; 

Тогда я пытаюсь установить какое-то значение в куки

 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; 

на этой странице теперь я могу получить доступ к-й e sesion, но когда i m переадресовывается на другую страницу asp.net, я не получаю мои значения сеанса. Кажется, что он потерян.

Любая идея, как решить эту проблему. Я хочу как сессию, так и файлы cookie.

+2

по умолчанию asp.net не использует Cookieless сеансов. Проверьте свой web.config, чтобы убедиться, что вы там что-то не активировали. –

ответ

1

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

Response.Cookies.Clear(); 

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

+0

Сессия будет существовать до тех пор, пока она не истечет, но не будет принадлежать никому, правильно? –

+0

@Nick True. Сеанс по-прежнему будет потреблять ресурсы на сервере, пока IIS не очистит его после периода ожидания (обычно 20 минут) –

4

Файлы cookie и Session не зависят друг от друга. Вы можете быть смущены, потому что по умолчанию Asp.Net Sessions используют куки-файл для хранения идентификатора сеанса, и когда файлы 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 требуют, чтобы вы сделали некоторую работу, чтобы получить запрос, ответ и сеанс.

Обе переменные сеанса и значения Cookies могут быть смешаны и согласованы с вашим содержанием без конфликтов. Один из распространенных сценариев - хранить значения в файлах cookie, которые вы хотите сохранить в разных сеансах. Но для того, чтобы это сработало, вы должны установить срок действия своего cookie. Файлы cookie без истечения срока действия не являются постоянными и не будут продолжаться между сеансами браузера.

// make the cookie to last for a week 
Request.Cookies["SomeCookieVar"].Expiration = DateTime.Now().AddDays(7); 
0

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

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

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

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"); 
} 

// Перейти на целевую страницу, где вы хотите, чтобы получить значения куки

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