【问题标题】:SessionID keeps changing in ASP.NET Core web apiSessionID 在 ASP.NET Core Web api 中不断变化
【发布时间】:2018-06-05 14:19:43
【问题描述】:

我使用 Angular 2 作为前端,使用 Asp.net Core Web API 作为服务器端。我的问题是当我试图在 HttpContext.Session 中维护会话时,但是对于每个请求,会话 ID 都在更改并且数据有迷路了,知道我想在服务器端管理会话如果没有其他方式在服务器端维护会话,是否可以在 web api 中维护会话?

【问题讨论】:

标签: asp.net-web-api2


【解决方案1】:

TanvirArjel 的回答对我有用:ASP.NET core 2.1 session

基本上,在ConfigureServices()方法上,在Startup类中,当你配置Cookies Policy时,你需要将“options.CheckConsentNeeded”定义为false,所以使用cookies不需要用户同意(好用于开发)。

【讨论】:

    【解决方案2】:

    遵循批准的答案并没有解决我的问题。经过进一步搜索,我发现了[this post][1],其中解释了原因和解决方案。

    ASP.NET 会话详细信息依赖于 cookie,而跨域请求就存在这样的问题。引用上述帖子-

    来自不同域的 XMLHttpRequest 无法设置 cookie 值 他们自己的域,除非在制作之前将 withCredentials 设置为 true 请求

    Angular 是如何解决这个问题的

    这是我如何在 Angular 中解决这个问题的总结

    1. 创建一个 [Angular Interceptor][2],顾名思义 在发送请求之前拦截请求(跨 申请)
    2. 克隆请求对象
    3. withCredentials 属性添加到值true

    它应该看起来像这样

    @Injectable()
    export class ConnectInterceptor implements HttpInterceptor {
        intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
            const authReq = req.clone({
                headers: req.headers.set("Authorization", "custom-token"),
    
                withCredentials: true // Important for consistent session id in ASP.NET
            });
            return next.handle(authReq);
        }
    }
    

    希望这会有所帮助 [1]:https://www.blinkingcaret.com/2018/07/18/secure-an-asp-net-core-web-api-using-cookies/ [2]:https://angular.io/api/common/http/HttpInterceptor

    【讨论】:

      【解决方案3】:

      或者您只需要为会话设置一些值。 ID 将保留。

      HttpContext.Session.SetString("Something", "Something");
      

      【讨论】:

      • 但是在跨域请求的情况下它不起作用
      猜你喜欢
      • 2010-09-21
      • 2010-11-04
      • 1970-01-01
      • 2019-10-16
      • 2021-09-11
      • 2023-03-12
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多