在Asp.Net核心中,当您将应用配置为app.UseSession()
时,会创建一个Cookie。
默认情况下,cookie称为“.AspNetCore.Session”。其值标识要使用的会话。目前,我正在将我的会话数据保存在sql server上。我需要知道“.AspNetCore.Session”的解密值,以便我可以在数据库中查找会话。
有没有办法解密这个值?我知道ASP.NET必须以某种方式在幕后进行。
答案 0 :(得分:2)
session source包含所有内容,但您需要了解它,ISessionStore和IDistributedSessionStore会为您提供一个会话密钥。
不是对cookie格式做出假设,是什么阻止你使用商店API?
答案 1 :(得分:-1)
我必须从Pad
中提取隐私Microsoft.AspNetCore.Session
函数,但我能够得到我需要的内容:
public class DiscussionController : Controller
{
private readonly IDataProtector _dataProtector;
public DiscussionController(IDataProtectionProvider dataProtectionProvider)
{
var protectorPurpose = "whatever purpose you want";
_dataProtector = dataProtectionProvider.CreateProtector(protectorPurpose);
}
public IActionResult Index()
{
HttpContext.Request.Cookies.TryGetValue(".AspNetCore.Session", out string cookieValue);
var protectedData = Convert.FromBase64String(Pad(cookieValue));
var unprotectedData = _dataProtector.Unprotect(protectedData);
var humanReadableData = System.Text.Encoding.UTF8.GetString(unprotectedData);
return Ok();
}
private string Pad(string text)
{
var padding = 3 - ((text.Length + 3) % 4);
if (padding == 0)
{
return text;
}
return text + new string('=', padding);
}
}