这是处理ASP.Net MVC 4 Web应用程序中的会话的好方法吗?

时间:2016-08-23 06:32:14

标签: c# asp.net asp.net-mvc session

我发现的是什么

我使用此SessionHelper作为ASP.Net MVC 4应用程序中管理会话对象的通用共享类。此类使用单例/静态对象来访问成员。我是建筑界的新手。所以我想知道这种情况对于我们有多个用户同时访问应用的网络应用是否安全。

为什么我这样做

  1. 会话[" keyName"]遍布整个应用。很难跟踪所有情况,即。使用了什么关键名称。

  2. 没有集中的会话管理。

  3. 我可以管理所有会话对象及其生命周期。

  4. 由于Sessions需要跨应用程序的所有用户访问,因此,我决定将其公开为静态。但突然之间,我回忆起来自SO的东西,试着避免将用户特定数据存储在公共静态变量中。所以我创建了会话对象,可以通过内部属性访问并实现单例模式.Made方法静态直接访问,因为我没有保留任何值。我不知道这是否是正确的做法?帮助我????

    CODE

    public sealed class SessionHelper
            {
            static readonly object _locker = new object();
            static SessionHelper _instance = null;
            private SessionHelper() { }
    
                /// <summary>
                /// Create a single instance of SessionHelper class
                /// </summary>
                /// <returns></returns>
                public static SessionHelper Instance() 
                {
    
                        if (_instance == null)
                        {
                            lock (_locker)
                            {
                                if (_instance == null)
                                {
                                    _instance = new SessionHelper();
                                }
                            }
                        }
                        return _instance;
                }
    
                /// <summary>
                /// Abandon Session and redirect
                /// </summary>
                /// <param name="url">url in format controller/action</param>
                public static void AbandonAndRedirect(string url)
                {
                    HttpContext.Current.Session.Abandon();
                    HttpContext.Current.Response.Redirect(url,true);
                }
    
                /// <summary>
                /// Abandon Session and redirect
                /// </summary>
                /// <param name="url">url in format controller/action</param>
                public static void Abandon()
                {
                    HttpContext.Current.Session.Abandon();
                }
    
                internal AuthenticationStatusCode AuthenticationStatus
                {
                    get
                    {
                        return (AuthenticationStatusCode) HttpContext.Current.Session["AuthStat"]  ;
                    }
                    set
                    {
                        HttpContext.Current.Session["AuthStat"] = value;
                    }
                }
                internal string UserName
                {
                    get
                    {
                        return HttpContext.Current.Session["UserName"] != null ? HttpContext.Current.Session["UserName"].ToString() : string.Empty;
                    }
                    set
                    {
                        HttpContext.Current.Session["UserName"] = value;
                    }
                }
        }
    

0 个答案:

没有答案