Profile包含很少的东西,比如用户名称、ID、头像、个人空间URL,这些最基本的。
以前用session保持登录状态时,这些东西可以全都放到Session["CurrentUser"]中。
但是现在用了forms验证,从User.Identity.Name中可以取到唯一key(虽然叫name,但是我觉得大多数情况下存的还是用户的email或者用户id吧,如果用户名称唯一的话倒是也可以放),假设现在系统中把ID存到User.Identity.Name中,当然取出来的时候需要Convert一下。
那么用户名称、头像、个人空间URL这些数据可以放到哪儿呢,基本上所有页面都会用到的,比如博客园,在右上角就会显示这些信息。
Session:有点不合适啊,如果用户勾选了“记住我”,auth cookies留在客户端俩月,这不还得加个判断看数据是否是失效了的,失效了再去取来放着,多个站点使用session的话还得用sqlserver或者stateserver方案什么的,有点麻烦。
Cache:基本上跟session是一样了,没了再取塞进去,可以设个滑动过期什么的,。
Cookies:这些信息都不是敏感信息,因为具体限定操作者身份的还是User.Identity.Name,其他只是为了方便读取而已,就算他篡改了,也只是自己的界面出问题,因为这些信息只用于显示。
还有一个想法就是,扩展forms验证本身存储的数据,比如扩展User.Identity,现在不是只有Name吗,能不能扩展成一个UserProfile对象来使用呢?
当然刚才也说了,如果数据不敏感,直接明文存也没什么,犯不着搭他的加密顺风车。
不知道我的想法有没有误区。大家在项目中使用的是哪种方式呢?望指点讨论一二啊~~
Cookie中保存User.Identity.Name,需要显示用户信息的地方根据User.Identity.Name从缓存(比如memcached)中取,如果缓存中没有,就从数据库中取,并放入缓存中。
谢谢村长回答!~这就是说选的cache方案啦。
我再琢磨琢磨,cookies和cache二选一。