我试图将会话数据存储在cookie中。我们的想法是将对象(非常小)存储为cookie中的json字符串。我正在使用此线程中答案中找到的类示例的修改版本:
Is this technique of ASP.NET session access multi-user-safe?
这是我正在尝试的...
using System;
using Newtonsoft.Json;
using System.Web;
namespace SomeNameSpace
{
public class MySession
{
// private constructor
private MySession()
{
SomeString = string.Empty;
MyDate = DateTime.Now;
UserId = 0;
}
// Gets the current session.
public static MySession Current
{
get
{
MySession session = null;
if (HttpContext.Current.Request.Cookies["Session"].Value != null)
{
// This is where I'm having trouble. Neither of these work:
session = JsonConvert.DeserializeObject<MySession>(HttpContext.Current.Request.Cookies["Session"].Value);
session = (MySession)JsonConvert.DeserializeObject(HttpContext.Current.Request.Cookies["Session"].Value);
}
if (session == null)
{
session = new MySession();
HttpContext.Current.Response.Cookies["Session"].Value = JsonConvert.SerializeObject(session);
}
return session;
}
}
public string SomeString { get; set; }
public DateTime MyDate { get; set; }
public int UserId { get; set; }
}
}
这一行:
session = JsonConvert.DeserializeObject<MySession>(HttpContext.Current.Response.Cookies["Session"].Value);
不会抛出错误。但问题是,它启动了构造函数,因此它总是返回具有默认值的对象。
这一行:
session = (MySession)JsonConvert.DeserializeObject(HttpContext.Current.Response.Cookies["Session"].Value);
引发错误:
Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'SomeNameSpace.MySession'
我该如何完成这项工作?
谢谢!
答案 0 :(得分:0)
您正在阅读关键字“会话”的响应 Cookie,该关键字从未设置过。您需要阅读请求 cookie。
话虽如此,如果这是会话数据,您不希望将其存储在用户可读和用户可编辑的cookie中。