ASP.NET应用程序身份验证问题

发布于 2024-11-05 18:56:55 字数 213 浏览 0 评论 0原文

我有一个使用表单身份验证的 ASP Web 应用程序。我没有使用 asp.net 会员资格提供程序,我正在创建自定义身份验证。因此,当用户登录时,我为他创建一张票证和一个 cookie,当用户注销时,我将删除它们。 当用户单击浏览器右上角的关闭按钮时,我遇到问题。如您所知,这是一个客户端事件,没有运行的服务器端事件。
我的问题是:
当用户单击关闭按钮以删除票证和 cookie 时,我该怎么办?

I have an asp web application that is using forms authentication. I am not using asp.net membership provider, I am creating custom authentication. Thus when a user login, I create for him a ticket and a cookie for him and when the user logout I delete them.
I have a problem when the user clicks the close button on top right of the browser. as you know this is a client side event and there is no server side event that run.
My question is:
What should I do when the user clicks the close button in order to remove the ticket and the cookie?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

她比我温柔 2024-11-12 18:56:55

您应该使用非持久性 cookie。您可以通过将 false 传递给此方法的第二个参数来执行此操作: http://msdn .microsoft.com/en-us/library/twk5762b.aspx

You should use non-persistant cookie. You do this by passing false to the second argument of this method: http://msdn.microsoft.com/en-us/library/twk5762b.aspx

明明#如月 2024-11-12 18:56:55

您可以挂接“onbeforeunload”DOM 事件。您可以采取多种方法

  1. 从客户端设置隐藏字段的值并调用 __doPostBack('fieldid')。在此字段的 value chagned 事件的服务器端事件处理程序中,删除票证和您的身份验证令牌。您可以将其设为 ajax 回发。这个想法是,即使用户关闭浏览器,您的 Web 服务器也会受到攻击,并且您将删除令牌。

  2. 在同一事件处理程序中触发 Web 服务调用以删除身份验证令牌。

You can hook onto "onbeforeunload" DOM event. There are a couple of approaches you can take

  1. From the client side set the value of a hidden field and call __doPostBack('fieldid'). In the server side event handler of this field's value chagned event remove the ticket and your authentication token. You can make this an ajax post back. Teh idea is that even if the user closes the browser your web server would have been hit and you will remove the token.

  2. In the same event handler fire a web service call to remove the authentication token.

厌味 2024-11-12 18:56:55

我想您可以在用户会话过期或结束后立即使用 session.Abandon() 和服务端的 session_end 事件删除票证。

就我而言,我会等到超时通过 ASP.NET 会话过期机制自行关闭会话。显然你不想依赖它,这就是为什么你需要以某种方式捕获“窗口关闭”事件并向服务器发送信号。

此链接可能会帮助您有关如何执行此操作的示例。

I suppose you delete the ticket as soon the user session expires or ends, using session.Abandon() and the session_end event on the service side.

As far I am concerned, I would wait until the timeout closes the session by itself with the ASP.NET session expiration mechanism. Apparently you dont want to rely on it, that's why you need to trap the "windows close" event somehow and send a signal to the server.

This link might help you to have an example about how to do this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文