拒绝访问持久性 cookie
Posted
技术标签:
【中文标题】拒绝访问持久性 cookie【英文标题】:Deny access to a persistent cookie 【发布时间】:2011-03-08 06:48:04 【问题描述】:如果有人从 Starbucks 登录电脑(例如)并且他们不小心选中了“记住我”选项,从而在该电脑上设置了一个持久性 cookie,有没有办法在不诉诸更改的情况下从服务器拒绝该 cookie web.config 中的 cookie 名称?
【问题讨论】:
我不明白这个问题。 “拒绝” cookie 是什么意思? @skaffman:为什么要添加 asp.net 标签?我在问题中找不到任何对 asp.net 的引用。 @GvS:web.config
是 ASP.NET 的东西,除非我错了。
@Skaffman:去喝咖啡 ;-)
我没有将它标记为 asp.net,(它只是出现在那里)。我的问题是我正在通过.net 中的 FormsAuthentication 处理登录。如果用户选择“记住我”,它会创建一个持久性 cookie,该 cookie 将永久登录该计算机上的用户。有没有办法停止这个过程?
【参考方案1】:
我通过在 web.config 中设置 machineKey 并在更改用户名/密码时更改它来解决这个问题(实际上是一段时间):
Sub ChangeMachineKey()
Dim commandLineArgs As String() = System.Environment.GetCommandLineArgs()
Dim decryptionKey As String = CreateMachineKey(64)
Dim validationKey As String = CreateMachineKey(128)
'HttpContext.Current.Response.Write(decryptionKey + "<br />" + validationKey + "<hr />")
Dim filename As String = HttpContext.Current.Server.MapPath("~/Web.config")
Dim XmlReader As XmlTextReader = New XmlTextReader(filename)
Dim xDoc As XmlDocument = New XmlDocument()
xDoc.Load(XmlReader)
XmlReader.Close()
Dim Node As System.Xml.XmlNode = xDoc.SelectSingleNode("//configuration/system.web/machineKey")
Node.Attributes.GetNamedItem("validationKey").Value = validationKey
Node.Attributes.GetNamedItem("decryptionKey").Value = decryptionKey
xDoc.Save(filename)
End Sub
Public Shared Function CreateMachineKey(ByVal numBytes As Integer) As String
Dim Random As Byte() = New Byte(numBytes / 2 - 1)
Dim rng As New RNGCryptoServiceProvider()
rng.GetBytes(Random)
Dim machineKey As New System.Text.StringBuilder(numBytes)
Dim i As Integer = 0
Do While i < Random.Length
machineKey.Append(String.Format("0:X2", Random(i)))
i += 1
Loop
Return machineKey.ToString()
End Function
这会迫使每个人重新登录,但由于只有一个管理员帐户,它非常适合我!
【讨论】:
以上是关于拒绝访问持久性 cookie的主要内容,如果未能解决你的问题,请参考以下文章
Apache htaccess:如果 REQUEST_URI 与 cookie 值不匹配,则拒绝