通过静态对象的静态属性访问asp.net会话变量是否安全?

Ron*_*rby 21 .net c# asp.net session static

通过静态对象的静态属性访问asp.net会话变量是否安全?

这就是我的意思:

public static class SessionHelper
{
    public static int Age
    {
        get
        {
            return (int)HttpContext.Current.Session["Age"];
        }

        set
        {
            HttpContext.Current.Session["Age"] = value;
        }
    }


    public static string Name
    {
        get
        {
            return (string)HttpContext.Current.Session["Name"];
        }

        set
        {
            HttpContext.Current.Session["Name"] = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

userA是否可以通过这种方式访问​​userB的会话数据?

Jam*_*iec 30

是的,这种方式很好 - 只要确保你这样做:

public static class SessionHelper
{

    private static HttpSession sess = HttpContext.Current.Session;
    public static int Age
    {
        get
        {
            return (int)sess["Age"];
        }

        set
        {
            sess["Age"] = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

正如我所见,这种方式向另一个用户显示一个用户的会话数据.(尽管在ASP.NET 1.1中)


Chr*_*lor 8

恕我直言,这实际上是一个很好的方法.它是类型安全的,添加可以让您以最小的影响更改事物的级别抽象.

您可能会更改某些内容的示例,如果您确定某个状态应该移动到缓存,甚至数据库与缓存相结合,这些都需要额外的线程同步,但都可以由此类的内部处理.您可以考虑将类的名称更改为特定于会话的内容.

我对你的特定例子的一个评论是你应该检查Session变量是不是null,并且返回一个合适的默认值,断言或引发一个信息性异常(如果是).以防在设置属性之前读取属性.