خروج از حساب کاربری در هنگام بستن مرورگر توسط وب سرویس

چهارشنبه 3 تیر 1394

یکی از معظلات امنیتی برنامه نویسان در ایجاد نرم افزارهای تحت وب این است که در هنگامی که کاربر در داخل پنل کاربری خود میباشد ، در هنگام بستن مرورگر کاربر را از پنل کاربری خود به صورت خودکار خارج کند .

خروج از حساب کاربری در هنگام بستن مرورگر توسط وب سرویس

تعریف محدوده زمانی برای ماندن کاربر در پنل کاربری خود، یکی از راه حلهای مهم برای این مشکل میباشد .نه به ما در رفع مشکل ماندن کاربر در پنل خود کمک میکند ، بلکه ما را در حل مسائل منطقی نرم افزار نیز یاری می کند .مانند میانگین زمانی که پس از آن کاربر را از پنل کاربری خود خارج میکند , یا میانگین زمانی که کاربر از نرم افزار استفاده میکند .بنابراین دستیابی به  اطلاعات ورود و خروج کاربر به پنل کاربری میتواند مهم باشد .

با کلیک بر روی دکمه ورود ، شما میتوانید به راحتی زمان ورود را دریافت کنید و امیدوارم که شما فعال بودن Session خود را در هنگام ورود چک کرده باشید .از طرف دیگر همچنین شما با کلیک بر روی دکمه خروج میتوانید زمان خروج را دریافت کنید .اما چه اتفاقی خواهد افتاد اگر کاربر مرورگر خود را ببندد  .چگونه می توانید زمان خروج کاربر از پنل را ثبت کنید.

استفاده از وب سرویس :

بجای استفاده از متدهای معمولی برای دریافت زمان خروج کاربر ما میتوانیم از وب سرویس استفاده کنیم .

وب سرویس چیست ؟

طبق تعریف شرکت مایکروسافت : وب سرویسها ، کامپوننتهایی بر روی وب سرور هستند که نرم افزارهای سمت کاربر میتوانند نوسط HTTP درخواست خود را ارسال نمایند و کاربران را قادر به استفاده از وب سرویس نمایند .همچنین لازم به ذکر است که این وب سرویسها را در هر کجا بر روی سیستم کاربر میتوان نصب نمود .

یک تابع با نام "onbeforeunload" از جاوا اسکریپت میباشد .این تابع در هنگام رویداد unload صفحه اجرا میشود .این تابع چه در هنگامی که شما مرورگر را ببندید و چه در هنگامی که شما یک tab page از مرورگر را ببندید فراخوانی میشود .

نکته : از متد ()alert در این تابع استفاده  نکنید .چرا که اجرا نمیشود .

با استفاده از این دستور ما میتوانیم Session id را دریافت نماییم و به وب سرویس ارسال کنیم .در داخل وب سرویس ما میتوانیم اعمال ضروری خود را انجام دهیم (دستورات مربوط به بانک اطلاعات)

در ابتدا یک پروژه با نام دلخواه ایجاد نمایید ، یک web form  در پروژه خود اضافه کنید ، در قسمت تگ های HTML اسکریپت زیر را قرار دهید :

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
        window.onbeforeunload = function (evt) {
            var message = 'You have started writing or editing a post.';
            var loginId = '<%= Session["LoginId"].ToString() %>';
            console.log('in');
 
            $.ajax({
                url: "Logout.asmx/LogoutMethod",
                contentType: "application/json; charset=utf-8",
                type: "POST",
                success: function (data) {
                    alert(data);
                },
                error: function (x, y, z) {
                    alert(x.responseText + "  " + x.status);
                }
            });
        }
</script>

در داخل وب سرویس کد زیر را قرار دهید ، و مطمئن شوید که دستور System.Web.Script.Services.

scriptService در حالت کامنت نباشد .

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class Logout : System.Web.Services.WebService
{
   [WebMethod (EnableSession = true)]
   public string LogoutMethod()
   {
       // take a log.txt and write on there with time
       string a = Session["LoginId"].ToString();
       File.AppendAllText(Server.MapPath("~/log.txt"),"Login id loges out "+a+ " at "+ DateTime.Now.ToString()+ Environment.NewLine);
 
        return "";
    }
}

 

 

فایل های ضمیمه

احسان حسینی

نویسنده 42 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید