【发布时间】:2015-08-12 03:52:07
【问题描述】:
我正在尝试清除会话并在单击注销链接时关闭浏览器选项卡。请帮我做这件事。
提前致谢
【问题讨论】:
-
关闭浏览器请参考this answer。清算会话请参考this answer
-
@Stephen Muecke 我试过了.. 但它没有关闭
我正在尝试清除会话并在单击注销链接时关闭浏览器选项卡。请帮我做这件事。
提前致谢
【问题讨论】:
您正在尝试实现两件不同的事情,其中一件是服务器端问题,另一件是客户端问题。
您可以尝试拆分这些问题,例如:
答:使用一些带有标签关闭 javascript 的 Post/Redirect/Get
B:更客户端的方法
【讨论】:
Session.Abandon();
or
Session.Clean();
or
Session[".."]=null;
关闭可以使用js的窗口
windows.close();
在某些浏览器中,它会弹出一个确认
【讨论】:
您可以向清除会话变量的操作方法发送 ajax 请求,并在回调中关闭窗口。
<a id=logoutLink">Logout</a>
<script type="text/javascript">
$(function(){
$("#logoutLink").click(function(e){
e.preventDefault();
$.post("@Url.Action("Logout","User")",function(res){
if(res.status==="done")
{
//close the window now.
window.close();
}
});
});
});
</script>
现在在您的 UserController 中,添加 Logout 操作方法
public class UserController : Controller
{
[HttpPost]
public ActionResult Logout()
{
Session.Abandon();
return Json(new { status="done"});
}
}
【讨论】:
此代码来自MSDN。我在 jQuery 调用中添加了 async : false ,因为这是确保调用刷新服务器端会话然后关闭窗口的关键。
<script type="text/javascript">
$(document).ready(function () {
window.addEventListener('beforeunload',recordeCloseTime);
});
function recordeCloseTime() {
$.ajax({
type: "POST",
async: false,
url: "ServiceToClearSession.asmx/RecordCloseTime",
});
}
</script>
【讨论】: