在网站的每个页面上处理会话

时间:2015-10-27 07:43:03

标签: asp.net session architecture webforms

我有一个数据驱动的网站,当前用户ID存储在Session [“UserId”]中。所以几乎所有页面中显示的所有数据都是用户特定的。当用户匿名使用网站时,它显示的是一组不同的结果,与UserId无关。

我的问题是我必须检查Session [“UserId”]在我使用Session [“UserId”]的每一行都不为空,而且我觉得这不是正确的方法。< / p>

有没有办法在page_load上检查Session是否为空?如果我的会话结果为null,我该如何处理呢?页面根本不会加载。

我希望我能够解释

1 个答案:

答案 0 :(得分:1)

不是在每个页面上都检查会话,而是将会话控件放在基类中,并使所有页面扩展到此类。每次页面进入Page_Init基本方法时,都会检查用户是否经过身份验证。如果未经过身份验证,则该方法将抛出将由Page_Error方法捕获的异常。此方法将清除会话资源并重定向到默认页面。

为会话控制制作一个分层的课程:

public class UserSession { }
public class AnonymousSession : UserSession {}

在您的页面登录上,根据登录类型将UserId放在会话上:

bool isAnon = GetAnonymous(); // Check form page if login is anonymously
UserSession user;
if(isAnon)
  user = new AnonymousSession();
else
   user = new UserSession();
Session.Contents.Add("UserId", user);

在名为PageBase的{​​{1}}中设置一个属性,告诉您用户是否已匿名输入,并在您的网页中使用该属性来设置每个网页的设置结果:

Anonymously