我的问题更多是关于如何使用会话信息为网站实现功能的建议请求。我有一个网站,要求在登录页面上输入用户名和密码。当用户成功登录时,会创建一个会话,用于存储其用户名和与该帐户相关的一些其他变量。在登录后立即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
函数开头的每个变量,或者是否有正确的方法来解决这个问题?
如果需要,请询问澄清。感谢。
编辑:根据给出的一些回复,我认为重要的是要注意,如果用户突然变得匿名(或超时),他们应该被重定向到登录页面。
答案 0 :(得分: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>
答案 1 :(得分: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'的答案)。此外,如果您使用的是表单身份验证,请记住使会话的持续时间超过表单身份验证超时。