1、后端
1.1 设置
Startup.cs (Sesion设置和跨域设置)
public void ConfigureServices(IServiceCollection services)
{
// Session
services.AddDistributedMemoryCache();
services.AddSession(opt =>
{
opt.Cookie.Name = "lesson09Demo"; // 本地Cookie名称
opt.Cookie.HttpOnly = true; // 禁止页面脚本读取Cookie
opt.IdleTimeout = TimeSpan.FromMinutes(2); // 过期时间2分钟
});
// 跨域要添加 来源域名WithOrigins()和方法AllowCredentials()
services.AddCors(opt => opt.AddDefaultPolicy(o => o.WithOrigins(new string[] {"http://192.168.1.4:8080" }).AllowAnyHeader().AllowAnyMethod().AllowCredentials()));
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSession();
}
1.2 使用
在控制器中
// 读取
string loginN = HttpContext.Session.GetString("loginName");
// 赋值(写入)
HttpContext.Session.SetString("loginName", sysUser.LoginName);
2、前端
调用时:
1、前端的地址和调用的后端地址要一致,如都是IP或都是localhost,否则它不能正常传递cookie,造成后端读session为null
2、axios的参数要加 {withCredentials: true},表示前端请求后端时 携带cookie,这样后端能读取到session
this.axios
.get(
"http://192.168.1.4:22477/api/User/Login?loginName=" +
this.form.loginName +
"&password=" +
this.form.password,
{
withCredentials: true,
}
)