Печенье и сессия в asp.net - PullRequest
       2

Печенье и сессия в asp.net

0 голосов
/ 17 августа 2011

Я создаю логин и сохраняю информацию о пользователе в куки, используя этот код

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

Я также создаю сеанс Session.Add ("useremail", txtUserName.Value);После успешной аутентификации он перенаправляется на user.aspx. Я хочу прочитать значение useremail на странице user.aspx, но когда я попытался получить доступ к значению на странице пользователя, оно не отображает поле 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 на страницу user.aspx, чтобы я мог передать это значение в функцию gridview

Ответы [ 3 ]

1 голос
/ 17 августа 2011

Просто измените его на

protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["useremail"] == null)
            Response.Redirect("Home.aspx");
        else
            BindGridView((string)Session["useremail"]);
    }
1 голос
/ 17 августа 2011

Вы можете добавить объект в состояние сеанса следующим образом:

Session["useremail"] = "john.smith@microsoft.com";

Затем вы можете получить его следующим образом:

var useremail = Session["useremail"] ?? null;
if (useremail == null)
{
   //...
}
else
{
    BindGridView(useremail);
}

Если элемент «useremail» имеет значениеотсутствует в состоянии сеанса, переменная useremail будет установлена ​​в ноль, иначе она будет содержать адрес электронной почты.

0 голосов
/ 17 августа 2011

Вы запутались в отношениях между аутентификацией, состоянием сеанса и файлами cookie. В ASP.NET состояние сеанса и проверка подлинности с помощью форм не связаны, т. Е. Их область действия различна. Вы можете иметь некоторое состояние сеанса для неаутентифицированного пользователя. При аутентификации сеансов и форм используются разные файлы cookie для целей отслеживания, а управление файлами cookie более или менее автоматизировано, и вам не нужно писать код, чтобы управлять им, как вы это сделали. Кроме того, то, что вы храните в cookie, не имеет никакого отношения к тому, что происходит в состоянии сеанса. Также возможно иметь как сеансовую, так и формальную аутентификацию, чтобы получить работу без файлов cookie. Поэтому код, подобный приведенному ниже, должен работать для состояния сеанса

Session["key"] = "put your data here";

// retrieve the data elsewhere
var data = Session["key"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...