Cookie 与 FormsAuthentication.SetAuthCookie() 方法的混淆

2024-04-26

StackOverflow 上有很多关于此的帖子,但我仍然无法解决我的确切问题。要点如下:

我有一个需要身份验证的网站。我正在使用标准 .NETFormsAuthentication.SetAuthCookie()保持用户会话的方法。

我的问题是这样的:在 web.config 文件中,“/system.web/authentication/forms”节点有一个超时属性。如果我将此值设置为 30 分钟,这是用户在会话过期之前可以拥有的用户不活动时间吗?

我问的原因是,无论我将此值设置为什么,如果我在 SetAuthCookie() 中将持久性设置为 true,则 cookie 设置的过期时间为 90 分钟。如果我在 SetAuthCookie() 中将持久性设置为 false,则 cookie 过期时间将设置为“会话结束”。

实际设置的“超时”属性值是什么?如何获得持续一个月、一年或更长时间的持久 cookie?


您在中找到的参数超时/system.web/authentication/forms是身份验证票证持续时间的超时(以分钟为单位)。

这意味着在一定时间不活动后,系统会提示用户再次登录。如果你尝试检查这个My.Profile.Current.IsAuthenticated这将是false.

您可以选择不保留 cookie。在这种情况下,如果您的票证过期,您的 cookie 也会过期。 Cookie(如果保留)的目的是在用户返回您的网站时记住该用户。

您可能希望将 cookie 保留 10 年,以便用户永远不必再次插入用户名和密码,除非他们选择删除 cookie。即使浏览器关闭(持久化时),cookie 仍然有效。

另一件需要记住的重要事情是参数slidingExpiration:

<authentication mode="Forms">
    <forms loginUrl="~/Partner/LogOn" defaultUrl="~/Home/Index" 
           timeout="30" slidingExpiration="true" />
</authentication>

如果这是真的,每次您的网站上有活动时,您的身份验证票都会更新:刷新页面等。

你能做的——以及我所做的——就是编写你自己的cookie,如下所示:

 FormsAuthenticationTicket authTicket = new
     FormsAuthenticationTicket(1, //version
     userName, // user name
     DateTime.Now,             //creation
     DateTime.Now.AddMinutes(30), //Expiration (you can set it to 1 month
     true,  //Persistent
     userData); // additional informations

Update

我已经实现了这个例程,因为我想将我的组存储在加密的 cookie 中:

Dim authTicket As System.Web.Security.FormsAuthenticationTicket = _
        New System.Web.Security.FormsAuthenticationTicket( _
            1, _
            UserName, _
            Now, _
            Now.AddYears(100), _
            createPersistentCookie, _
            UserData)

Dim encryptedTicket As String = System.Web.Security.FormsAuthentication.Encrypt(authTicket)

Dim authCookie As HttpCookie = New HttpCookie( _
    System.Web.Security.FormsAuthentication.FormsCookieName, _
    encryptedTicket)

If (createPersistentCookie) Then
    authCookie.Expires = authTicket.Expiration
End If

Response.Cookies.Add(authCookie)

正如您所看到的,我已将身份验证 cookie 和身份验证票证的过期时间设置为相同的超时(仅当持久时)。

我尝试过的另一件事是将用户名和密码存储在加密的 cookie 中。 每次加载母版页时,我都会检查 My.Profile.Current.IsAuthenticated 以查看身份验证是否仍然有效。如果没有,我再次读取cookie,获取用户名和密码,然后在数据库上检查:

Public Function ReadCookieAuthentication(ByVal Context As System.Web.HttpContext) As Security.CookieAuth

    Dim CookieUserData = New Security.CookieAuth()

    Dim cookieName As String = System.Web.Security.FormsAuthentication.FormsCookieName
    Dim authCookie As HttpCookie = Context.Request.Cookies(cookieName)

    If (Not (authCookie Is Nothing)) Then
        Dim authTicket As System.Web.Security.FormsAuthenticationTicket = Nothing
        Try
            authTicket = System.Web.Security.FormsAuthentication.Decrypt(authCookie.Value)
            If (Not (authTicket Is Nothing)) Then
                If (authTicket.UserData IsNot Nothing) AndAlso Not String.IsNullOrEmpty(authTicket.UserData) Then
                    CookieUserData = New JavaScriptSerializer().Deserialize(Of Security.CookieAuth)(authTicket.UserData.ToString)
                End If
                CookieUserData.UserName = authTicket.Name
            End If
        Catch ex As Exception
            ' Do nothing.
        End Try
    End If

    Return (CookieUserData)

End Function

Security.CookieAuth 是我创建的一个用于返回用户名和密码的对象。
CookieUserData 是放置密码和组的存储(我以 json 格式保存)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cookie 与 FormsAuthentication.SetAuthCookie() 方法的混淆 的相关文章

随机推荐

  • Java BeanUtilsBean:将日期转换为字符串

    我正在尝试跑步BeanUtilsBean getInstance populate 但在 HTML 表单上 有一个字段包含出生日期的字符串表示形式 对象 bean 的字段类型为java util Date 阅读 Ggl 的一些搜索 这些搜索
  • 使用版本控制时处理多台计算机上的 web.config 差异

    我确信每个人都必须处理这些情况 我们检查我们的源代码控制解决方案 每台开发机器都有自己的资源用于调试 构建和测试 最常见的是 网络服务器 IIS 数据库 SQL Web服务器很容易处理 每个开发机器都会有自己的proj user文件来指定不
  • 从 XGrabKeyboard 中排除一些键

    考虑一个应用程序 需要在聚焦时抓住键盘 以便捕获所有窗口管理器命令 Alt F4 等 进行处理 现在 这有一个缺点 即当键盘被抓住时 用户无法通过键盘切换到另一个应用程序或虚拟桌面 我想要一个用户定义的组合键白名单 例如 用于切换虚拟桌面的
  • 如何使用plotlyexpress添加置信区间fillcontour?

    我正在使用plotlyexpress 添加趋势线 现在如何像seaborn regplot 中那样绘制置信区间 df px data tips fig px scatter df x total bill y tip trendline o
  • 变换/不透明度属性是否调用浏览器传送带中的绘制步骤

    调查浏览器的渲染工作原理我注意到在带有启用标志的 Chrome 开发工具中paint flashing触发更改时的绘制步骤transform opacity财产 使用代码查看这些屏幕截图 示例1 transform opacity财产 le
  • dplyr & r: 匿名函数可能需要加上括号

    我想我偶然发现了拼写错误的第一个错误 我正在使用 R 和 dplyr 运行以下代码 gt foobar c 1 2 3 gt foobar gt as character 1 1 2 3 这工作正常 现在我尝试通过匿名函数运行它 gt fo
  • zend 框架 where 查询中的语句

    我如何使用 php 和 zend 框架在 mysql 查询中使用 And or 现在我正在使用这个 db Zend Db Table getDefaultAdapter select new Zend Db Select db select
  • 如何以正确的方式从 JavaScript 获取 contextPath?

    使用基于 Java 的后端 即 servlet 和 JSP 如果我需要来自 JavaScript 的 contextPath 建议的模式是什么 为什么 我能想到几种可能性 我还缺什么吗 1 将 SCRIPT 标签烧录到页面中 并在某些 Ja
  • vim 脚本:如何在 vim 函数中执行命令

    为什么会出现以下情况 let s colorschemes synic ir black let s colorscheme idx 0 function RotateColorscheme let s colorscheme idx 1
  • 计算 docx 文档中的页数

    我有一个word文件 我想计算其中有多少页 该文件是使用 Docx4Java 创建的 以前有人这样做过吗 Thanks docx4j 没有页面布局模型 因此它无法告诉您页数 您可以使用 FOP 的页面布局模型获得大致的页数 docx4j 的
  • 使用 iOS 7 SDK 构建时 UITextView 会自动换行

    我有一个UITextView里面一个UIScrollView效果很好iOS 6建造自xcode 4 x 但是现在构建xcode 5它无法正常工作 即使在iOS 6 问题是文本会随着屏幕宽度换行 即使UITextView and UIScro
  • C# 中参数/参数之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 参数和参数有什么区别 https stackoverflow com questions 156767 whats the difference between an argument and a p
  • Delphi 的免费软件数据透视表组件?

    Delphi 是否有开源或免费软件的数据透视表组件 据我所知 Delphi 没有免费的枢轴组件 在 Torry net 上查找 delphi 中最著名的枢轴组件是 Develop Express 的 ExpressPivotGrid Sui
  • 使用管道的Python多进程非阻塞相互通信

    是否可以使用管道以非阻塞方式接收进程间通信 考虑以下代码 from multiprocessing import Process Pipe import time def f conn time sleep 3 conn send Done
  • 无法实例化抽象类...在appDevDebugProjectContainer.php - Symfony2

    我昨天刚安装的apc我现在收到此错误 FatalErrorException Error Cannot instantiate abstract class ACME WebBundle Menu MenuBuilder in var ww
  • 通过 perl 脚本使用代理

    我想在这个 perl 脚本中使用代理 但我不知道如何让它使用代理 usr bin perl use IO Socket remote IO Socket INET gt new Proto gt tcp PeerAddr gt localh
  • 如何将本地文件名传递给 ClassPathXmlApplicationContext?

    本地文件名 是指资源文件与类文件位于同一目录中 在下面的例子中 这是JUnitRunner class文件 爪哇的getResource http docs oracle com javase 7 docs api java lang Cl
  • 命令 /usr/bin/codesign 失败,退出代码 1

    我正在尝试在我的手机上测试一个应用程序 我不断收到此错误 Command usr bin codesign failed with exit code 1 我已经添加了配置文件并完成了 Apple iPhone 门户上的设置 我已经看了这个
  • Scala:返回布尔值的模式匹配的缩写形式

    我发现自己经常写这样的东西 a match case b gt do stuff case gt do nothing 有没有更短的方法来检查某个值是否与模式匹配 我的意思是 在这种情况下我可以写if a b do stuff 但是如果模式
  • Cookie 与 FormsAuthentication.SetAuthCookie() 方法的混淆

    StackOverflow 上有很多关于此的帖子 但我仍然无法解决我的确切问题 要点如下 我有一个需要身份验证的网站 我正在使用标准 NETFormsAuthentication SetAuthCookie 保持用户会话的方法 我的问题是这