日期:2014-05-18  浏览次数:20459 次

ASP.net的Form验证模式__代替以前的Session__IIS重启后Session问题
以前用Session方式


//登录成功
Session["UserName"] = dv[0]["UserName"].ToString();
Session["DeptId"] = dv[0]["DeptId"].ToString();

===================================
现在我想用ASP.net的Form验证模式。

现在可以用User.Identity.Name来代替Session["UserName"]

但我应该用什么来代替Session["DeptId"]呢?现在是一个,如果我有多个Session呢?


====================================
期间我想过解决方案:除了UserName外的Session变量,我还是用Session
这样会有个问题:
如果只是Session时,我一重启IIS,再判断Session没值了,所以再让他登录。
而现在我用了Form验证模式后,我重启IIS后,User.Identity.Name仍能正常工作,重启IIS不会对他有影响。而这时如果我有一部分数据是用Session的,这些数据就没了。

我的本意是想用Form验证模式,不用在每页都要判断一下权限,而现在IIS一重启,那些Session都没了,相关页面里我还得判断一下是不是Session没了,如果没了就根据UserName再查一下数据库,这样就又回到以前的Session时代了。

=====================================
怎么弄一下就可以扩展出像User.Identity.Name这样调用UserName一样方便的调用其它的数据。
这里我可能说的不明白,不过相信遇到过这问题的高人应该能明白我在说什么,还望不吝赐教

------解决方案--------------------
1.可以自定义MEMBERSHIP
2.FORM认证可以用COOKIE方式
3.这些都是MEMBERSHIP SERVICE的功能,你查一下吧
------解决方案--------------------
Form验证的本质是用cookie 存放用户信息

既然你都有了User.Identity.Name 那根据这个就可以从数据库把用户其他信息都读出来
无法是你自己写个方法实现
------解决方案--------------------
正规的做法是扩展MembershipProvider...继承它自己写一个Provider...

要是嫌太麻烦就用2楼的方法,需要时从数据库读...适当用缓存减少数据库交互...
------解决方案--------------------
探讨
项目紧,先这么实现了:

void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码

if (Session["Deptid"] == null)
{
Response.Redirect("/");
}

}

当Session没了就让他再登录一次。理论上也实现了我想要的:权限整体设置,不用一个页一个页设置的目标了。