1

我的问题更多的是关于如何使用会话信息在网站上实现功能的建议。我有一个网站要求在登录页面上输入用户名和密码。当用户成功登录时,会创建一个会话来存储他们的用户名和与帐户相关的一些其他变量。在Page_Load登录后的函数中,我成功地通过会话变量访问了附加到用户的这些信息,验证它是否正确实现。

在 MySession 类中:

private MySession()
{
   Username = Data.User.lblUsername;
   CompanyId = Data.User.lblCompanyId;
}

在我的欢迎页面中(成功登录后立即)

private void Page_Load(object sender, System.EventArgs e)
{
   secure_username = MySession.Current.Username;
   ...
}

我想使用此信息,即secure_username在访问页面后验证用户,以便人们不再跳过登录表单。在MySession课堂上,我是否只是if(MySession.Current.Username == ??)在函数开始时使用语句来检查每个变量Page_Load,还是有适当的方法来解决这个问题?

如果需要,请要求澄清。谢谢。

编辑:根据给出的一些回复,我认为重要的是要注意,如果用户突然变得匿名(或超时),他们应该被重定向到登录页面。

4

2 回答 2

2

如果您使用表单身份验证,则可以添加以下标签web.config以拒绝任何匿名访问。如果这样做,则不必检查用户是否在每个页面上都登录。

<authorization>
  <deny users="?" /> 
</authorization>

添加此项以允许所有用户查看 Login.aspx 以便他们可以登录

<location path="Login.aspx" allowOverride="false">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

添加这个,以便匿名用户可以看到所有 css/images 文件夹

<location path="css" allowOverride="false">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

<location path="images" allowOverride="false">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

您可能需要根据您的网站设置和您希望任何匿名用户访问的文件夹添加额外的位置标签

如果登录表单身份验证会话过期,用户将被重定向到您在此标签中提到的 url

<forms loginUrl="Login.aspx" timeout="30">
</forms>
于 2013-01-02T18:04:14.050 回答
1

如果您需要在每个页面上执行相同的操作,听起来您需要一个基类,所有安全页面都继承自:

基本页面:

public class BasePage : System.Web.UI.Page
{

  public user secure_username
  {get;set;}

  protected void Page_Load(object sender, EventArgs e)
  {
    //add your checks that repeat on each page
  }
}

其他页面:

public class AuthenticatedUsersPage : BasePage
{

}

注意:这当然假设您已经对配置文件进行了授权和身份验证(有关更多信息,请参见 rs 的答案)。此外,如果您使用表单身份验证,请记住让会话持续时间长于表单身份验证超时时间。

于 2013-01-02T17:52:12.747 回答