ASP.NET Mvc 4中每个用户仅限一个会话 [英] Limit Only One Session Per User In ASP.NET Mvc 4

查看:76
本文介绍了ASP.NET Mvc 4中每个用户仅限一个会话的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个Web应用程序,我希望确保该网站每个用户一次只能登录一次。

用户登录时我正在更新表列islogged = 1当注销时我正在更新islogged = 0

但问题是用户会话超时或用户关闭浏览器我是无法捕获此事件。我正在使用sqlserver状态来存储会话,因此在此状态下不会触发Session_End事件。

它仅适用于InProc状态。并且在浏览器关闭事件中我尝试过onunload事件。但是这个事件也会在关闭标签时触发。无法区分标签关闭和浏览器关闭。

我只想要一个并发用户登录。有没有其他方法来实现这一点。



i使用此代码捕获浏览器关闭事件。

< body class =fixed -toponclick =clicked = true; onunload =CheckBrowser()>



< script type =   text / javascript> 
var clicked = false ;
// var xmlHttp
// var browser = navigator.appName;

function CheckBrowser(){
调试器

// var browserClose = isUserClickedCloseButton();
if (点击== false ){
$ .ajax({
url: @ Url .Content(〜/ Account / LogOff
type :' 发布'
成功:功能ion (数据){

},
错误: function (){alert( Logut上的错误......); }

});
}

解决方案

.ajax({
url: @ Url.Content(〜/ Account / LogOff
类型:' 发布'
成功:功能(数据){

},
错误: function (){alert( Logut上的错误...);}

});
}


请查看以下具有类似Q& A的链接。



http://stackoverflow.com/questions/17515716/only -one-concurrent-login-per-user-in-asp-net [ ^ ]



Asp.net中每个UserID只有一个并发登录 [ ^ ]


< script type =text / javascript> 
var clicked = false;
函数CheckBrowser()
{
debugger;
if(clicked == false)
{
//浏览器关闭
}
其他
{
//重定向
clicked = false;
}
}

函数bodyUnload()
{
debugger;
if(clicked == false)//浏览器关闭
{
debugger;
var request = GetRequest();

request.open(GET,Logout,true);
request.send();
}
}

函数GetRequest()
{
调试器;
var request = null;
if(window.XMLHttpRequest)
{
//包括IE7,FF,Opera和Safari浏览器
request = new XMLHttpRequest();
}
其他
{
//旧浏览器如IE 6.x和IE 5.x
request = new ActiveXObject('MSXML2.XMLHTTP.3.0' );
}
返回请求;
}







并将其添加到正文标签中

 onunload的= bodyUnload();的onclick =点击=真; 


I am working on one web application in which i want to make sure that website allow only one login per user at a time.
when user login i am updating table column islogged=1 when logoff i am updating islogged =0
but the problem is when user session timeout or if user closing browser i am unable to capture this events.i am using sqlserver state to store sessions so Session_End event is not fired in this state .
it only works in InProc State. and also in browser close event i have tried onunload event. but this event is fired on tab closed also. not able to differentiate tab close and browser close.
i want only one concurrent user login. is there any other way to achieve this.

i am using this code to capture browser close event.
<body class="fixed-top" onclick="clicked=true;" onunload="CheckBrowser()">

   <script type="text/javascript">
        var clicked = false;
       // var xmlHttp
    //    var browser = navigator.appName;

        function CheckBrowser() {
            debugger

            //  var browserClose = isUserClickedCloseButton();
            if (clicked == false) {
                $.ajax({
                    url: "@Url.Content("~/Account/LogOff")",
                    type: 'Post',
                    success: function (data) {

                    },
                    error: function () { alert("Error On Logut..."); }

                });
}

解决方案

.ajax({ url: "@Url.Content("~/Account/LogOff")", type: 'Post', success: function (data) { }, error: function () { alert("Error On Logut..."); } }); }


Please check the below links which has similar Q&A.

http://stackoverflow.com/questions/17515716/only-one-concurrent-login-per-user-in-asp-net[^]

Only one concurrent login per UserID in Asp.net[^]


<script type="text/javascript"> 
    var clicked = false;
    function CheckBrowser()
    {
        debugger;
        if (clicked == false)
        {
            //Browser closed
        }
        else
        {
            //redirected 
            clicked = false;
        }
    }
 
    function bodyUnload()
    {
        debugger;
        if (clicked == false)//browser is closed
        {
            debugger;
            var request = GetRequest();
           
            request.open("GET", "Logout", true);
            request.send();
        }
    }
 
    function GetRequest()
    {
        debugger;
        var request = null;
        if (window.XMLHttpRequest)
        {
            //incase of IE7,FF, Opera and Safari browser
            request = new XMLHttpRequest();
        }
        else
        {
            //for old browser like IE 6.x and IE 5.x
            request = new ActiveXObject('MSXML2.XMLHTTP.3.0');
        }
        return request;
    }




and add this in body tag

onunload="bodyUnload();" Onclick="clicked=true;


这篇关于ASP.NET Mvc 4中每个用户仅限一个会话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆