我的应用程序的三个实例在三个单独的选项卡中打开,用户从一个选项卡注销,并在同一个选项卡中使用其他凭据登录,并开始使用其他两个选项卡之一进行浏览,如何注销用户从那两个标签?
我的前端技术是AngularJS,API是用Web Api编写的,我使用令牌进行身份验证,令牌存储在会话cookie中。
答案 0 :(得分:0)
当用户从一个选项卡注销时,您可以向服务器发送请求以禁用/销毁令牌。
在您的网络API中,您可以检查令牌是否有效,如果不是,您可以返回未经授权的状态代码。
if (!IsValidToken())
return Request.CreateResponse(HttpStatusCode.Unauthorized,ErrorMessage);
当您从服务器收到未经授权的状态时,使用拦截器将用户重定向到您的登录页面。
.factory('myInterceptor', ['$q', '$location', '$injector', function ($q, $location, $injector) {
return {
response: function (response) {
return response || $q.when(response);
},
responseError: function (rejection) {
if (rejection.status === 401) {
var stateService = $injector.get('$state');
stateService.go('login');
}
return $q.reject(rejection);
}
}
}])
.config(['$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push('myInterceptor');
}]);
使用此方法,只有当用户从其他选项卡执行进一步请求时,才会将用户重定向到登录状态。如果您希望在不执行任何请求的情况下重定向它们,则可以使用$ interval来每隔几秒检查一次令牌的有效性。
答案 1 :(得分:-2)
当用户点击退出时,以下脚本可以正常工作
<?php
if (isset($_POST['submit'])) {
session_start();
session_unset();
session_destroy();
header("Location: ../index.php");
exit();
}
它会自动从所有标签中销毁会话。当用户在一个选项卡中使用其他凭据登录时,他仍然可以访问其他选项卡中的同一页面,因为会话仍然在页面上显示其凭据。