日期:2014-05-17  浏览次数:20832 次

角色管理,高手进。。。
想要根据用户所属的不同角色,呈现不同的页面。用C#后台代码写
Session["IsUserInRoleOperator"] = User.IsInRole("operator");

发觉,这个记录的总是前一个登陆的用户信息。一个会话结束,我怎么删除这个会话的session信息,用session.clear()不行,用response.cookies.clear()、request.cookies.clear()也不行,不知是不是我放错了位置?有没有其他办法可以在我关闭这个链接后,就能将此次会话的所有信息删除的?
还有为什么User.IsInRole("operator")不是保存着我此次登陆用户的信息,而是上一个的呢?

求解。。。

------解决方案--------------------
引用:
Quote: 引用:

没做过c#后台,只弄过php的,估计你生成的session名是固定的,要把session名生成随机的,推出的时候在进行清理就好了。

我需要用到这个session,因为要在所有程序上调用这个session,所以将其生成为固定的。有没其他办法呢?我能指定删除某个session名吗?
c#操作session我不会啊,你自己搜一下吧!应该可以的。
------解决方案--------------------
想要根据用户所属的不同角色,呈现不同的页面?还是删除session信息?
------解决方案--------------------
看你User貌似继承自System.Security.Principal.IPrincipal,但这个IsInRole返回的是bool值。。。

至于清除对话

HttpContext.Current.Session.Clear();
HttpContext.Current.Session.Abandon();

------解决方案--------------------
引用:
Quote: 引用:

Session是可以很灵活的操作的,必须可以Remove和Clear的,看看你这里是不是有其他的问题

Remove和clear都可以正常执行,没有什么问题,我是觉得本地的cookie将上个用户的登陆信息保存了,才会出现这样一个状况的!我想知道,你们一般会怎么用session来区分登陆用户是属于哪个角色的?

确实,一般来说用Session直接存储定义个用户信息的实体,如果涉及到角色信息,那就在设计对应实体,尽量是能够在登录时通过数据库进行查询得到这些基本信息(因为他们不是经常变动),所以这样在页面跳转等等时,仅需要执行权限判断的代码,总之就是,需要这些基本信息的地方,可以直接从Session里面取。
至于System.Security.Principal.IPrincipal,就不太清楚了,没研究过这样的,我当初所涉及的角色类,都是在数据库保存角色信息和判断的,没这么使用过User的东西

------解决方案--------------------
Session["IsUserInRoleOperator"]=NULL 肯定清的掉。。