gan*_*dil 18 c# asp.net asp.net-mvc httpcookie
我尝试在我的应用程序中实现一个基本的cookie帮助器.主要是我每次检查基本控制器是否设置了cookie.如果是cookie
public class MyCookie
{
public static string CookieName {get;set;}
public virtual User User { get; set; }
public virtual Application App { get; set; }
public MyCookie(Application app)
{
CookieName = "MyCookie" + app;
App = app;
}
public void SetCookie(User user)
{
HttpCookie myCookie = HttpContext.Current.Request.Cookies[CookieName] ?? new HttpCookie(CookieName);
myCookie.Values["UserId"] = user.UserId.ToString();
myCookie.Values["LastVisit"] = DateTime.Now.ToString();
myCookie.Expires = DateTime.Now.AddDays(365);
HttpContext.Current.Response.Cookies.Add(myCookie);
}
public HttpCookie GetCookie()
{
HttpCookie myCookie = HttpContext.Current.Request.Cookies[CookieName];
if(myCookie != null)
{
int userId = Convert.ToInt32(myCookie.Values["UserId"]);
User user = session.Get<User>(userId);
return user;
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
如果session为null我尝试从cookie获取或者如果session初始化我设置cookie但我从未在浏览器中看到我的cookie.怎么了?
我总是开始会话但是用userId = 0要从cookie获取cookie并设置会话:
if (userId == 0)
{
MyCookie myCookie = new MyCookie(_app);
User user = cookieHelper.GetCookie();
if (user != null)
SessionHelper.SetSession(user);
}
Run Code Online (Sandbox Code Playgroud)
Whi*_*gon 19
您无法在同一请求中设置和获取cookie.获取cookie会从浏览器中获取它并且尚未获得它 - 设置cookie会在请求完成时将其作为标题的一部分发送回来.
您需要设置cookie并让浏览器重定向到其他地方(例如从/ login到/ account)然后在新请求上读取它将正确显示cookie.
编辑:如果猜测错误,我也会质疑你实际调用的地方.SetCookie()在你提供的代码中没有任何地方你实际上是在调用它来创建cookie.
为了调试这些东西,我发现你可以使用你认为应该工作的代码来测试它们.例如,在新页面的page_load中我输入了:
string CookieName = "bob";
long UserId = 4;
HttpCookie myCookie = HttpContext.Current.Request.Cookies[CookieName] ?? new HttpCookie(CookieName);
myCookie.Values["UserId"] = UserId.ToString();
myCookie.Values["LastVisit"] = DateTime.Now.ToString();
myCookie.Expires = DateTime.Now.AddDays(365);
HttpContext.Current.Response.Cookies.Add(myCookie);
Run Code Online (Sandbox Code Playgroud)
并且cookie正确显示没有问题.所以知道这段代码确实有效,我们可以假设错误是没有被调用的函数,或者你正在进行的测试/调试是试图在同一个请求中设置和读取cookie并且失败(正如我最初所说)
祝你好运!
gan*_*dil 14
我的工作实施(基本版)
public class CookieHelper
{
public static string CookieName {get;set;}
public virtual Application App { get; set; }
public MyCookie(Application app)
{
CookieName = "MyCookie" + app;
}
public static void SetCookie(User user, Community community, int cookieExpireDate = 30)
{
HttpCookie myCookie= new HttpCookie(CookieName);
myCookie["UserId"] = user.UserId.ToString();
myCookie.Expires = DateTime.Now.AddDays(cookieExpireDate);
HttpContext.Current.Response.Cookies.Add(myCookie);
}
}
Run Code Online (Sandbox Code Playgroud)
如果session/cookie为null(实际上userid = 0)
if (userId == 0){
CookieHelper myCookie = new Cookie(_app);
if (myCookie != null)
{
userId = Convert.ToInt32(System.Web.HttpContext.Current.Request.Cookies[myCookie.CookieName]["userId"]);
if(userId>0)
{
SessionHelper.SetSession(userId);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73168 次 |
| 最近记录: |