C#程序中session值的保存方法以及转为字符串的方法总结
C#中保存Session的三种方法及Web.Config设置
保存session到sqlserver;,需要指定SqlServer;服务器,这种方法因为要读写数据库最慢
<sessionState mode="SQLServer" sqlConnectionString="datasource=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"/>
保存session到windows进程,要使用这种方法,需要打开aspnet_state.exe服务,通过此方法,我们可以将session保存到其它服务器,这样可以实现多台服务器的session共享
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42626" cookieless="false" timeout="20"/>
默认情况,.net将session保存到当前进程中,这种方式最快,但是不能多台服务器共享session
<sessionState mode=”InProc” cookieless=”false” timeout=”20” />
将Session的值转为String
在实际操作当中,我们经常会遇到将Session的值转为String去判断是否为空或者判断是否有权限访问某页,这里的转换过程如果用得不恰当会抛出异常,给访问者带来不好的用户体验。这里我把它写成笔记,以供参考。
1.当Session["a"]==null时,
Session["a"].ToString()抛出异常;
(string)Session["a"]为null;
Convert.ToString(Session["a"])为""。
2.当Session["a"]==""时,
它们的值都为""。
所以,在判断Session["a"]是否有值时,如果用“.ToString()”,那么必需按照下面的格式与顺序写:
if(Session["a"]!=null&&Session["a"].ToString()!="")
在这里,要注意判断的顺序:先判断是否为null,再判断是否为empty。如果Session["a"]为null,则Session["a"]!=null为false自然不会执行.ToString(),也就不会报错;如果Session["a"]不为null,则执行.ToString()也不会报错。
同理if(Session["a"]==null||Session["a"].ToString()=="")此句也合法可用。
用.ToString()的方法写格式比较固定,如果换成用(string)写,会比较自由:
if((string)Session["a"]!=null&&(string)Session["a"]!="") if(Session["a"]!=null&&(string)Session["a"]!="")
这两种写法都是可行的,而且对null和empty的判断顺序没有关系。
最简单的方法就是用Convert.ToString
if(Convert.ToString(Session["aaa"])=="")
不管Session["a"]为null还是empty,Convert.ToString(Session["aaa"])都是empty。