HttpCookie 因未知原因被删除
HttpCookie gets deleted for unknown reason
好的,就这样。出于某种原因,此 cookie 正在 deleted/overwritten。
它确实存在了一段时间。好吧,对于代码 2 的一个循环,但是当通过页面加载再次调用代码 2 时,它不包含我的数据。
cookie 包含的是一个编码的会话 ID,用于确定该用户是谁以及他们是否是管理员。
如果它没有用于比较的 sessionID,它会将用户定向到登录页面。
假设用户角色设置为 1。
代码 1:http://pastebin.com/rfP7se0x
代码 2:http://pastebin.com/c2Jy7zQ1(删除了与 cookie 无关的代码。)
代码 3:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FormsAuthenticateProject.Customer
{
public partial class Customer : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DBConnLayer DBCL = new DBConnLayer();
DBCL.userRoleRedirect();
}
}
}
}
在 userRoleRedirect
(http://pastebin.com/c2Jy7zQ1) 中,您正在进行以下条件检查:
else if (ckDateTime.CompareTo(DateTime.Now) > 0)
您需要检查这是否会计算为真。我怀疑 cookie 过期时间意味着 Now
和 cookie 过期时间之差加起来不大于 0。罪魁祸首可能在于以下解析过期时间的代码:
DateTime.TryParseExact(myCookie.Values["LogoutTimer"], DTFormat,
CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out ckDateTime);
这里已经回答了这个答案:cookie values disappear when traversing between content pages
我将这段代码添加到 userRoleRedirect 的第一行
if (Request.Cookies["Session"] != null)
{
Response.Cookies.Set(Request.Cookies["Session"]);
}
和HttpCookie myCookie = Request.Cookies["Session"];
到
var myCookie = Request.Cookies["Session"].Values;
我使用
myCookie["ValueName"]
获取值
它returns一个字符串。
好的,就这样。出于某种原因,此 cookie 正在 deleted/overwritten。
它确实存在了一段时间。好吧,对于代码 2 的一个循环,但是当通过页面加载再次调用代码 2 时,它不包含我的数据。
cookie 包含的是一个编码的会话 ID,用于确定该用户是谁以及他们是否是管理员。
如果它没有用于比较的 sessionID,它会将用户定向到登录页面。
假设用户角色设置为 1。
代码 1:http://pastebin.com/rfP7se0x
代码 2:http://pastebin.com/c2Jy7zQ1(删除了与 cookie 无关的代码。)
代码 3:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FormsAuthenticateProject.Customer
{
public partial class Customer : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DBConnLayer DBCL = new DBConnLayer();
DBCL.userRoleRedirect();
}
}
}
}
在 userRoleRedirect
(http://pastebin.com/c2Jy7zQ1) 中,您正在进行以下条件检查:
else if (ckDateTime.CompareTo(DateTime.Now) > 0)
您需要检查这是否会计算为真。我怀疑 cookie 过期时间意味着 Now
和 cookie 过期时间之差加起来不大于 0。罪魁祸首可能在于以下解析过期时间的代码:
DateTime.TryParseExact(myCookie.Values["LogoutTimer"], DTFormat,
CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out ckDateTime);
这里已经回答了这个答案:cookie values disappear when traversing between content pages
我将这段代码添加到 userRoleRedirect 的第一行
if (Request.Cookies["Session"] != null)
{
Response.Cookies.Set(Request.Cookies["Session"]);
}
和HttpCookie myCookie = Request.Cookies["Session"];
到
var myCookie = Request.Cookies["Session"].Values;
我使用 myCookie["ValueName"]
获取值
它returns一个字符串。