- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
因此 StackOverflow 上有很多关于此的帖子,但我仍然无法解决我的确切问题。这是要点:
我有一个需要身份验证的网站。我正在使用标准的 .NET FormsAuthentication.SetAuthCookie()
方法来保持用户的 session 。
我的问题是:在 web.config 文件中,“/system.web/authentication/forms”节点有一个超时属性。如果我将此值设置为 30 分钟,这是用户在 session 到期之前可以拥有的用户不活动时间吗?
我问的原因是,无论我将此值设置为什么,如果我在 SetAuthCookie() 中将持久性设置为 true,则 cookie 集的到期时间为 90 分钟。如果我在 SetAuthCookie() 中将持久性设置为 false,则 cookie 过期设置为“ session 结束”。
“超时”属性值的实际设置是什么,我如何才能获得持续一个月、一年或更长时间的持久性 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
更新
我已经实现了这个例程,因为我想将我的组存储在加密的 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 格式)。
关于c# - Cookie 与 FormsAuthentication.SetAuthCookie() 方法混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4939533/
所以,我在 Controller 中有代码: FormsAuthentication.SetAuthCookie("hello", true);throw new Exception("" + Use
我正在尝试在新环境中设置我的网站,但我遇到了成员(member)提供商的问题。 我可以调用 Membership.ValidateUser,它应该返回 true 和 false。太完美了。 但是,在我
您好,我正在对我的 ASP.Net MVC2 项目进行一些单元测试。我正在使用最小起订量框架。在我的 LogOnController 中, [HttpPost] public ActionResult
在检查用户的凭据并确认它们是正确的之后,我使用 FormsAuthentication.SetAuthCookie("Username", false); 来验证用户。 然后在母版页中,我使用 Pag
我正在开发一个 asp.net mvc 应用程序并创建了我的自定义用户数据库和注册程序(需要电子邮件验证)。我可以将 FormsAuthentication.SetAuthCookie 与我自己的登录
我有一个网络应用程序可以安装在很多域和路径上。 所以: client1Name.{mySite.com} client2Name.{mySite.com} 演示。{mySite.com}/prospe
我正在使用 createuserwizard 控件。在 CreatedUser 事件中,我放置了此代码以将用户添加到角色。 protected void RegisterUser_Create
我首先要说的是,也许这有点矫枉过正。 在我的登录例程中,我在使用 FormsAuthentication.SetAuthCookie 之前加密了用户的登录 ID。 问题是,如果加密字符串最终包含转义字
我正在使用 aspx 和 c# 为登录设置身份验证 cookie。 FormsAuthentication.SetAuthCookie(UserName, True) 我想在同一个 cookie 中存
我似乎找不到这个看似简单的问题的答案。 使用第一个或后者有什么区别?为什么我要使用第一个? 在 MSDNAA 上,我发现以下有关 Formsauthentication.setCookie() 的内容
因此 StackOverflow 上有很多关于此的帖子,但我仍然无法解决我的确切问题。这是要点: 我有一个需要身份验证的网站。我正在使用标准的 .NET FormsAuthentication.Set
我有一些代码用于创建身份验证票证。创建票证后,我们调用SetAuthCookie来设置cookie,例如: FormsAuthentication.SetAuthCookie(username, tr
在我的 MVC 3 应用程序中,我有一个非常基本的 Controller [HttpPost] public ActionResult SignIn(LogonModel logonModel) {
我有一些代码可以用来创建身份验证票证。创建票证后,我们调用 SetAuthCookie 来设置 cookie,例如: FormsAuthentication.SetAuthCookie(usernam
我在测试中使用了 Form Authentication。还有一些测试用户名。但发现指定名称的奇怪问题。这是所有测试名称,只有一个名为 amybeyond 的名称可以在测试中使用。 请帮助检查我的测试
我正在尝试使用基本表单例份验证实现 ASP.NET MVC5 应用程序。所以有我的登录方法: [HttpPost] [AllowAnonymous] public Action
问题一: setAuthCookie 是否比 FormsAuthentication.Encrypt(ticketVariable) 更不安全? 我的意思是,如果有人试图通过修改用户名来修改 setA
好的,我很困惑,asp.net 中的 FormsAuthentication.SetAuthCookie() 是否创建基于 session 的 cookie?从我收集到的将一些东西放入 session
我发现 FormsAuthentication.SetAuthCookie 抛出 NullReferenceException - 未将对象引用设置为天蓝色网站上的异步操作内的对象实例。 我发现了以下
很抱歉,如果这已经被覆盖,但我要拔掉我的头发。我的网站正在使用表单例份验证,当我在//localhost 上测试时它运行良好,但是当我发布到网络时它在 IE9 中不起作用。我已按照教程中列出的所有步骤
我是一名优秀的程序员,十分优秀!