【问题标题】:Asp.Net MVC authencation with Wep Api使用 Web Api 进行 Asp.Net MVC 身份验证
【发布时间】:2018-03-19 01:26:47
【问题描述】:

我正在使用 Web API 开发一个 MVC 项目。当用户登录时,我正在向 Web 服务发送一个令牌。我将此令牌保存在 MVC 端的 Session 对象中。如果此会话为空,我想从用户再次登录。但有时这个会话对象会被自己删除。这可能是什么原因?

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api login token session-cookies


    【解决方案1】:

    会话的超时时间为 20 分钟。这可能意味着您的用户在这 20 分钟内没有将任何内容发回服务器。

    另一个可能导致会话超时的问题是,如果您通过 Visual Studio 更改 web.config 或其他文件中的某些内容。这将在后台触发编译过程并重置您的会话。

    开箱即用的默认会话是InProc 会话。这意味着您的会话与您的 Web 应用程序在同一进程中运行。

    如果您想在仍然能够更新 Web 应用程序的同时保留会话,则需要使用 Out of processSQL Server 作为会话存储。 (请注意,这些会话状态并不真正适用于您将在本地更新内容的场景,而是在生产中和/或如果您有一个网络农场,但没有什么能阻止您在本地使用它们。)

    StateServer(进程外)

    此会话模式将使用服务调用ASP.NET State Service。此服务设置为手动。您首先需要打开服务(单击开始 -> 运行 -> services.msc)。找到上面提到的服务,双击将启动改为Automatic,然后Start

    在您的web.config 中,您需要在<system.web> 下更新或添加(如果不存在)以下键:

      <sessionState mode="StateServer"
                    stateConnectionString="tcpip=YourComputerNameGoesHere:42424"
                    cookieless="false"
                    timeout="20"/>
    

    将超时 value 更新为适合您的任何值。

    SQLServer 状态

    SQL Server 状态允许您将会话存储在服务器上的指定数据库中。您必须记住的一件事是,这是所有选项中最慢的选项,因为它必须从服务器传输到服务器(在您的情况下,它可能是同一台服务器,但如果您将 Web 应用程序和 sql 服务器分开,请记住这一点)

    要配置 SQLServer 状态,您必须执行几个额外的步骤。首先将配置添加到web.config

    <sessionState mode="SQLServer"
                  sqlConnectionString="Integrated Security=SSPI;data         source=MySqlServerForSessions;" />
    

    (我现在不记得是否可以更改数据库的名称,但现在使用默认值。)

    下一步是从命令提示符运行aspnet_regsql 命令。此命令应在您的 C:\Windows\Microsoft.NET\Framework\vX.Y.ZZZZ 中(其中 X.Y.ZZZZ 是 .NET Framework 的版本。尝试使用您拥有的最高版本):

    aspnet_regsql.exe -S MySqlServerForSessions -E -ssadd -sstype p

    这将创建一个存储会话的新数据库。如果您有 SQLExpress,则在运行此命令时可能会遇到问题。为此,您需要运行:

    EXECUTE sp_configure 'show advanced options', 1
    RECONFIGURE WITH OVERRIDE
    GO
    
    EXECUTE sp_configure 'Agent XPs', 1
    RECONFIGURE WITH OVERRIDE
    GO
    
    EXECUTE sp_configure 'show advanced options', 0
    RECONFIGURE WITH OVERRIDE
    GO
    

    这应该可以帮助您处理会话。要记住的一件事是,在 global.asax 中,当您使用 StateServerSQLServer 时,您不能使用 Session_End 事件。此事件仅针对 InProc 会话状态触发。

    有关更多信息,请查看以下两个链接:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-17
      • 2015-09-17
      • 2015-01-12
      • 2014-06-02
      • 2013-11-16
      • 2013-12-09
      • 2017-07-04
      • 1970-01-01
      相关资源
      最近更新 更多