ASP.NET Core教程-Configuration(配置)-Cookie & Session
更新记录
转载请注明出处:
2022年11月3日 发布。
2022年11月1日 从笔记迁移到博客。
配置Cookie
获得Cookie对象
使用上下文Context 对象的属性 HttpRequest 对象和 HttpRespose 对象,获得Cookie对象。
使用 HttpContext.Request 获得 Cookie。
Console.WriteLine(this.HttpContext.Request.Cookies["key"]);
使用 HttpContext.Respose 获得 Cookie。
this.HttpContext.Response.Cookies.Append("Key", "Value");
Cookie的键值对配置
使用 CookieOptions 类型进行配置具体的键值对。
名称 | 描述 |
---|---|
Domain | This property specifies the hosts to which the browser will send the cookie. By default, the cookie will be sent only to the host that created the cookie. |
Expires | This property sets the expiry for the cookie. |
HttpOnly | When true, this property tells the browser not to include the cookie in requests made by JavaScript code. |
IsEssential | This property is used to indicate that a cookie is essential |
MaxAge | This property specifies the number of seconds until the cookie expires. Older browsers do not support cookies with this setting. |
Path | This property is used to set a URL path that must be present in the request before the cookie will be sent by the browser. |
SameSite | This property is used to specify whether the cookie should be included in cross-site requests. The values are Lax, Strict, and None (which is the default value). |
Secure | When true, this property tells the browser to send the cookie using HTTPS only. |
获得Cookie对象的键值对
public string GetCookie()
{
string cookieValue = this.HttpContext.Request.Cookies["Test"] ?? "0";
return $"Count:{cookieValue}";
}
增加/修改Cookie对象的键值对
public string SetCookie()
{
this.HttpContext.Response.Cookies.Append("Test", "0");
return "Add Success";
}
删除Cookie对象的键值对
public string DeleteCookie()
{
this.HttpContext.Response.Cookies.Delete("Test");
return "Delete Cookie";
}
配置Session
Session中间件说明
Session中间件需要使用缓存中间件配合,即需要确定Session的数据到底存储在什么地方。支持的缓存中间件如下:
中间件 | 说明 |
---|---|
AddDistributedMemoryCache | 基于内存的缓存。This method sets up an in-memory cache. Despite the name, the cache is not distributed and is responsible only for storing data for the instance of the ASP.NET Core runtime where it is created. |
AddDistributedSqlServerCache | 基于SQLServer的缓存。This method sets up a cache that stores data in SQL Server and is available when the **Microsoft.Extensions.Caching.SqlServer ** package is installed. |
AddStackExchangeRedisCache | 基于Redis的缓存。This method sets up a Redis cache and is available when the Microsoft.Extensions. Caching.Redis package is installed. |
配置Session服务和中间件
注册Session服务。下面使用基于服务器内存的缓存定义Session。
//先注册缓存中间件(基于内存)
builder.Services.AddDistributedMemoryCache();
//注册Session中间件
builder.Services.AddSession(options =>
{
//设置过期时间(1小时)
options.IdleTimeout = TimeSpan.FromHours(1);
//设置必须使用Cookie
options.Cookie.IsEssential = true;
});
在中间件配置中启用 Session 中间件。
app.UseAuthorization();
//使用Session中间件
app.UseSession();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
ISession 接口
通过 HttpContext 上下文对象获得 Session 实例。Session实例实现了 ISession 接口,支持以下方法:
方法 | 说明 |
---|---|
Clear() | This method removes all the data in the session. |
CommitAsync() | This asynchronous method commits changed session data to the cache. |
GetString(key) | This method retrieves a string value using the specified key. |
GetInt32(key) | This method retrieves an integer value using the specified key. |
Id | This property returns the unique identifier for the session. |
IsAvailable | This returns true when the session data has been loaded. |
Keys | This enumerates the keys for the session data items. |
Remove(key) | This method removes the value associated with the specified key. |
SetString(key, val) | This method stores a string using the specified key. |
SetInt32(key, val) | This method stores an integer using the specified key. |
除了这些方法,可以使用扩展方法,自己进行扩展额外的功能方法。
在Controller中使用Session
检测 Session 是否可用
public string SessionIsAvaliable()
{
if (this.HttpContext.Session.IsAvailable)
{
return "Avaliable";
}
else
{
return "Not Avaliable";
}
}
获得 Session 键值对
public string GetSessionKeyValuePair()
{
//先检测 Session 是否可用
if(!this.HttpContext.Session.IsAvailable)
{
return "Session Not Avaliable";
}
//Session Id
string sessionId = this.HttpContext.Session.Id;
//Session Value
string panda = this.HttpContext.Session.GetString("Panda") ?? "None";
int dog = this.HttpContext.Session.GetInt32("Dog") ?? 0;
//返回
return $"Session Id: {sessionId},Panda:{panda},Dog:{dog}";
}
设置 Session 键值对
public string SetSessionKeyValuePair()
{
//先检测 Session 是否可用
if (!this.HttpContext.Session.IsAvailable)
{
return "Session Is Not Set";
}
this.HttpContext.Session.SetString("Panda", "666");
this.HttpContext.Session.SetInt32("Dog", 222);
this.HttpContext.Session.CommitAsync();
return "Session Set Success";
}
移除 Session 键值对
public string RemoveSession()
{
//检测Session是否可以使用
if(!this.HttpContext.Session.IsAvailable)
{
return "Session Is Not Avaliable";
}
//先检测指定的Key是否存在
if (!this.HttpContext.Session.Keys.Contains("Panda"))
{
return "Key:Panda Is Not Avaliable";
}
//然后移除指定Key
this.HttpContext.Session.Remove("Panda");
return "Remove Key: Panda Is Success";
}
清除 Session 键值对
public string ClearSession()
{
//先检测Session是否可用
if(!this.HttpContext.Session.IsAvailable)
{
return "Session Is Not Avaliable";
}
//清空Session
this.HttpContext.Session.Clear();
return "Clear Success";
}
获得 Session 所有 Key
public string GetAllSessionKeys()
{
//先检测Session是否可用
if (!this.HttpContext.Session.IsAvailable)
{
return "Session Is Not Avaliable";
}
if(this.HttpContext.Session.Keys.Count()<=0)
{
return "Session Is Not Contain Any Key";
}
StringBuilder resultString = new StringBuilder();
foreach (string key in this.HttpContext.Session.Keys)
{
resultString.Append("Session Keys:");
resultString.Append(key);
}
return resultString.ToString();
}
本文来自博客园,作者:重庆熊猫,转载请注明原文链接:https://www.cnblogs.com/cqpanda/p/16846551.html