2012-09-14 2 views
1

Я реализую функцию Remember Me, на странице входа с checkbox. Когда я вошел в аккаунт, cookie создал срок действия!
это мой полный кодCookie истекает после перенаправления в C#

страница это мой login.aspx.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using LTS_DAL; 
using System.Web.Security; 

public partial class LTS_Login : System.Web.UI.Page 
{ 
LTS_DataClassesDataContext dc; 
HttpCookie c = new HttpCookie("remme"); 

public int ValidateUser(string username, string password) 
{ 
    int val=0; 
    dc = new LTS_DataClassesDataContext(); 
    var query = (from sn in dc.LTS_Login_Masters 
       where sn.LM_Password == password && sn.LM_Username == username 
       select sn).ToList(); 
    if (query.Count > 0) 
    { 
     var qu = (from sn in dc.LTS_Employee_Masters 
        where sn.Emp_ID == query[0].LM_Emp_ID 
        select sn).ToList(); 
     LTS_Session.Current.loginDetail = qu[0]; 
     c.Values.Add("Emp_Name", qu[0].Emp_FName); 
     c.Values.Add("Emp_ID", qu[0].Emp_ID.ToString()); 
     Session["LoggedIn"] = "Yes"; 

     var appoff = (from sn in dc.LTS_Approval_Officers 
         where sn.Officer_1 == query[0].LM_Emp_ID || sn.Officer_2 == query[0].LM_Emp_ID 
         select sn).ToList(); 

     if (appoff.Count() != 0) 
     { 
      val = 2;    
     } 
     else 
     { 
      val = 1; 
     } 
    } 
     return val; 
} 

protected void AuthenticateUser(string UserName, string Password, bool RememberMeSet) 
{ 
    string strRedirect = ""; 

    int val = ValidateUser(UserName, Password); 
    if (val == 1 || val == 2) 
    { 
     if (RememberMeSet) 
     { 
      //clear any other tickets that are already in the response 
      Response.Cookies.Clear(); 
      //set the new expiry date - to thirty days from now 
      DateTime expiryDate = DateTime.Now.AddDays(30); 
      //create a new forms auth ticket 
      FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, UserName, DateTime.Now, expiryDate, true, String.Empty); 
      //encrypt the ticket 
      string encryptedTicket = FormsAuthentication.Encrypt(ticket); 
      //create a new authentication cookie - and set its expiration date 
      HttpCookie authenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
      authenticationCookie.Expires = ticket.Expiration; 
      //add the cookie to the response. 
      Response.Cookies.Add(authenticationCookie); 

      c.Values.Add("UserName", UserName); 
      c.Values.Add("Password", Password); 
      Response.Cookies["remme"].Expires = DateTime.Now.AddHours(1); 
      c.Expires = DateTime.Now.AddHours(1); 
     } 
     if (val == 1) 
     { 
      strRedirect = Request["ReturnUrl"]; 
      if (strRedirect == null) 
       strRedirect = "UserHomePage.aspx"; 
     } 
     else if (val == 2) 
     { 
      c.Values.Add("App_Off1", "y"); 
      strRedirect = "~/Admin/DashBoard/DashBoard.aspx"; 
     } 
     Response.Cookies.Add(c); 
     Response.Redirect(strRedirect); 
    } 
    else 
    { 
     lblMsg.Text = "Invalid Login"; 
    } 
} 
protected void btnsubmit_Click(object sender, EventArgs e) 
{ 
    AuthenticateUser(txtusname.Text, txtpass.Text, chkRemme.Checked); 
} 
} 



это моя вторая страница, где я звоню печенье Dashboard.aspx.cs Это моя домашняя страница после входа в систему.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using LTS_BAL; 
using System.Net.Mail; 
using System.Configuration; 

public partial class Admin_DashBoard_DashBoard : System.Web.UI.Page 
{ 
Dash_Board em = new Dash_Board(); 
HttpCookie ck; 
static int Leave_ID; 
static int Emp_ID; 

protected void grdPenLeave_PageIndexChanging(object sender, 
GridViewPageEventArgs e) 
{ 
    grdPenLeave.PageIndex = e.NewPageIndex; 
    BindGrdPenLeave(); 
} 
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     ck = Request.Cookies.Get("remme"); 
     Authorize(); 
    } 
} 

protected void Authorize() 
{ 
    string strRedirect; 
    if (Request.Cookies["remme"] != null) 
    { 
     if (Session["LoggedIn"] == null) 
     { 
      //if (Request.Cookies["remme"].Name[3] != null) 
      if (ck["App_Off1"] != null) 
      { 
       strRedirect = "~/Admin/DashBoard/DashBoard.aspx"; 
       Emp_ID = int.Parse(ck["Emp_ID"].ToString()); 
      } 
      else 
      { 
       strRedirect = Request["ReturnUrl"]; 
       if (strRedirect == null) 
        strRedirect = "UserHomePage.aspx"; 
      } 
      Response.Redirect(strRedirect); 
     } 
     else 
     { 
      Session["LoggedIn"] = "Yes"; 
      if (ck["Emp_Name"] != null) 
      { 
       lblHeadUserName.Text = "Hello " + ck["Emp_Name"].ToString(); 
       Emp_ID = int.Parse(ck["Emp_ID"].ToString()); 
      } 
     } 
    } 
    else if (Request.Cookies["remme"] == null && Session["LoggedIn"] == null) 
    { 
     strRedirect = "~/LTS_Login.aspx"; 
     Response.Redirect(strRedirect); 
    } 
} 
} 


+0

пожалуйста обеспечивает полный код - где с объявлен и какой именно тип c –

+0

вы проверяете файл cookie после перенаправления? – V4Vendetta

+0

@Parv Код Шармы обновился! – Sushant

ответ

0

Я не совсем уверен, что если вы действительно проверки Cookie после перенаправления Response.Redirect("~/Admin/UserHomePage.aspx");? Так что я сделал небольшой пример, демонстрирующий о том, как установить и получить печенье ..

ASPX страницу

<div> 
    Cookie: 
    <br /> 
    <asp:Literal ID="litCookie" runat="server"></asp:Literal> 
    <br /> 
    <br /> 
    <asp:Button ID="btnSetCookie" runat="server" Text="Set Cookie" 
     onclick="btnSetCookie_Click" /> 
</div> 

код за

protected void Page_Load(object sender, EventArgs e) 
{ 
    HttpCookie c = Request.Cookies["myCookie"]; 
    if (c != null) 
     litCookie.Text = string.Format("Username {0} Passwort {1}", c["username"], c["password"]); 
    else 
     litCookie.Text = "No Cookie \"myCookie\" found!"; 
} 
protected void btnSetCookie_Click(object sender, EventArgs e) 
{ 
    HttpCookie c = new HttpCookie("myCookie"); 
    c.Expires = DateTime.Now.Add(new TimeSpan(0, 1, 0)); 
    c.Values.Add("username", "franz"); 
    c.Values.Add("password", "1234"); 
    Response.Cookies.Add(c); 

    litCookie.Text = "Cookie added! Please reload to load cookie"; 
    // or redirect manually 
    // Response.Redirect("YOURSITE.aspx"); 
} 
+0

код обновил – Sushant

+0

В Login.aspx.cs (после того, как я помню, нажмите меня флажок), даже если истечение печенья установлен в:. 'Response.Cookies [«Remme»] = Истекает DateTime.Now.AddHours (1); ' Когда после редиректа я получить доступ к куки в Dashboard.aspx.cs в: ' ск = Request.Cookies.Get («Remme»); ' Комментарии: ск не равно нулю, но когда я закрыть браузер и перезапустите Dashboard.aspx страница 'ck = Request.Cookies.Get (" remme ");' is null, и он снова приводит меня к входу страница – Sushant

+0

Я не совсем уверен, что ваш файл cookie создан поверх всех .. PLS проверить этот вопрос [cookies на localhost] (http://stackoverflow.com/questions/390219/why-wont-asp-net-create-cookies-in-localhost) и комментарий, если это решает вашу проблему! –

Смежные вопросы