【发布时间】:2011-04-18 09:33:09
【问题描述】:
我正在做一个项目,一旦用户被引导到某个页面,他们就会收到一定级别的“身份验证”,如果用户之前尝试离开该页面,我想删除这个“身份验证”他们填写了一份表格。
我想知道当重定向离开适合 Page 事件生命周期的特定页面(或者如果您有建议,则使用不同的页面)时,这是否是一种获取方法调用的方法?
我对 C# 和 .Net 框架有点陌生,所以如果这不是标准的,那么请告诉我什么是正确的方法。
谢谢!
【问题讨论】:
我正在做一个项目,一旦用户被引导到某个页面,他们就会收到一定级别的“身份验证”,如果用户之前尝试离开该页面,我想删除这个“身份验证”他们填写了一份表格。
我想知道当重定向离开适合 Page 事件生命周期的特定页面(或者如果您有建议,则使用不同的页面)时,这是否是一种获取方法调用的方法?
我对 C# 和 .Net 框架有点陌生,所以如果这不是标准的,那么请告诉我什么是正确的方法。
谢谢!
【问题讨论】:
您可以尝试使用由 JavaScript 事件触发的 PageMethod。这需要 aspx 中的 ScriptManager。
示例: JavaScript
function LeavePage(e) {
PageMethods.RevokeAuthentication();
}
window.onbeforeunload = LeavePage;
背后的C#代码
[PageMethod]
public static void RevokeAuthentication()
{
// Do stuff here
}
但是,这种方法并非万无一失。如果客户端的浏览器禁用了脚本,则 JavaScript 将不会运行。
也许更好的方法是在 MasterPage 中使用 Session 处理身份验证。 MasterPage 类似于 PHP 开发人员使用包含的方式。
例如OnLoad 检查页面,如果 pageName 允许更高的身份验证,则设置它,否则撤销它。
【讨论】:
您的页面不会知道它正在被导航离开,因为它实际上是无状态的。一旦页面由 C# 生成,它就会被传输到浏览器。该页面不在 C# 中“存在”。一旦生成,就是这样。
您可以使用会话变量来跟踪用户的“身份验证”级别。如果他们点击其他页面,您可以检查此变量的值并采取相应措施。如果他们填写了表格,您将在会话中记录该事实。
另一种选择是在用户离开页面时使用 javascript 回调到服务器。这不会在 Page 事件生命周期内起作用,因为它已经完成了
这种“身份验证”是否存在很长时间?需要坚持吗?
【讨论】: