C# 中对 Session 的“(string)”、“.ToString()”与“Convert.ToString”用法笔记

在实际操作当中,我们经常会遇到将 Session 的值转为 String 去判断是否为空或者判断是否有权限访问某页,这里的转换过程如果用得不恰当会抛出异常,给访问者带来不好的用户体验。这里我把它写成笔记,以供参考。

一、当 Session["a"] == null 时,

Session["a"].ToString() 抛出异常;

(string)Session["a"] 为 null;

Convert.ToString(Session["a"]) 为 ""。

二、当 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。

session有效时间默认为20分钟,内容来自中国站长资讯网(www.chinahtml.com)这个时间是指,当用户登录后,如果没有任何动作,即不在web上有请求.将维持这个用户的身份有效时间是20分钟,如果这个用户一直与web有请求操作,那么,这个时间一直没有算在20分钟内,即,如果用户登录后,即便操作一个小时,那么也不会出现超时,除非用户与服务器之间掉线
Web.config文件中的Session配置信息
mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20" />

使用Session对象在页面之间传值

使用Session对象可以在页面之间传值,但是需要注意的是不能在Session对象中存储过多的数据,否则服务器会不堪重负,另外当不再需要seesion对象时,应及时释放该对象。

例如,使用Session对象来传送用户的登录名,在另一页中,将用户的登录名显示出来。

使用Session对象保存用户登录名的代码如下:

Session.Remove("UserName"); Session["UserName"] = txtName.Text; Response.Redirect("NavigatePage.aspx");

在NavigatePage.aspx页面中,将Session对象的值显示在界面上,其代码如下:

if (Session["UserName"] == null) { Response.Redirect("Default.aspx"); } else { Label1.Text =Session["UserName"].ToString(); }

使用Session验证用户登录

在ASP.NET中,利用Session对象验证用户是否登录的方法很简单,例如在本实例中,当用户安全登录时,可以利用如下代码保存用户的登录名,并跳转到NavigatePage.aspx中。

if (txtName.Text == "mr" && txtPassword.Text == "mrsoft") { Session["UserName"] = txtName.Text.Trim(); Response.Redirect("NavigatePage.aspx"); }

在NavigatePage.aspx页面中,当页面加载时,首先判断Session对象中是否有值,如果有值,则进行其他操作;否则,则返回到登录页中。其主要代码如下:

if (Session["UserName"] == null) Response.Redirect("Default.aspx"); else { //其他操作 }

注意:Session对象默认失效期为20分钟,用户也可以在Web.Config中对其进行设置

----------------------------------------------------------------------总结2--------------------------------------------------------

目前我对Session的理解是:Session是保存在服务器端的用户变量。我可以在一个页面中对Session进行值,然后在另一个页面里访问它。

Session的附值方法如下:

int userId = 1;
string userName = "test";
string userPwd = "e10adc3949ba59abbe56e057f20f883e"

Session["userId"] = userId;
Session["userName"] = userName;
Session["userPwd"] = userPwd;

或者是使用Session的Add方法

Session.Add("userId",userId);
Session.Add("userName", userName);
Session.Add("userPwd", userPwd);

这有点像是在创建一个哈希表

在WebForm1.cs中的Page_Load事件里添加上上面的代码,然后就一在WebForm2.cs的Page_Load事件里添加如下代码:

Lable1.text = Session["userId"].ToString();
Lable2.text = Session["userName"].ToString();
Lable3.text = Session["userPwd"].ToString();

接下来,先打开WebForm1.aspx,然后再打开WebForm2.aspx,就可以看到之前在WebForm1.cs中为Session变量附的值了。

 

c# session总结的更多相关文章

  1. session实现购物车

    为实现简单的购物功能(购物车添加.账户查看.购物车商品删除.实时的购物商品数量及价格的计算显示.购物车商品数量可手动输入等),用session实现了一简单的以php语言为基础.连接MySQL数据库的购 ...

  2. Asp.net Core中使用Session

    前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...

  3. 懒加载session 无法打开 no session or session was closed 解决办法(完美解决)

           首先说明一下,hibernate的延迟加载特性(lazy).所谓的延迟加载就是当真正需要查询数据时才执行数据加载操作.因为hibernate当中支持实体对象,外键会与实体对象关联起来.如 ...

  4. 探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  5. Nhibernate的Session管理

    参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需 ...

  6. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  7. zookeeper源码分析之六session机制

    zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...

  8. [转载]Cookie/Session的机制与安全

    Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和哪个客户在打交道.本文来详细讨论Cookie和Session的实现机制,以及其中涉及的安全问题. 因 ...

  9. 修改session垃圾回收几率

    <?php //修改session垃圾回收几率 ini_set('session.gc_probability','1'); ini_set('session.gc_divisor','2'); ...

  10. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

随机推荐

  1. 转载: Nova-Router 分析

    很早的实现了,nova代码已经做了很多修改了. 以创建实例 URL(http://10.191.7.32:8773/v1.1/service?*****)为例说明 Router 的执行流程 1. 依据 ...

  2. maven项目打包

    配置 你的pom.xml文件,配置 packaging为 war ,然后点击 pom.xml右键,run as 选择 install 或是 package: 如果项目没问题,配置没问题,就会在项目的t ...

  3. IOS 8弃用api

    IOS 8弃用api 下面api是弃用: 的 UIApplication 方法和属性注冊通知. 使用新的API. 的 uiviewcontroller 面向接口的方法和属性. 中描写叙述的特征和大小类 ...

  4. CSS实现倒影-------Day80

    发现这个功能的时候非常开心,结果不想居然是个残次品,让我不禁想起了"天龙八部"上段誉的六脉神剑,在这个浏览器上能够.在还有一个上就无论了啊,时灵时不灵的,只是有总比没有要来的好,一 ...

  5. 如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_processes * worker_connections/4

    如果nginx 中worker_connections 值设置是1024,worker_processes 值设置是4,按反向代理模式下最大连接数的理论计算公式: 最大连接数 = worker_pro ...

  6. Mac  任何选项没有了怎么办?

    1.如果需要恢复允许"任何来源"的选项,即关闭 Gatekeeper,请打开终端 2.然后使用 spctl 命令:  sudo spctl --master-disable

  7. 扑克k,你知道的人物吗?

    在扑克牌中,黑桃K——大卫王(以色列联合王国第二任国王):红桃K——查里曼大帝(法兰克国王,后加冕为罗马人的皇帝):梅花K——亚历山大大帝(马其顿帝国国王):方块K——凯撒大帝(罗马共和国终生执政官) ...

  8. SharePoint2010 Form验证配置流程

    1.修改管理中心的Web.config文件,位置:C:\inetpub\wwwroot\wss\VirtualDirectories\42903 2.修改应用程序的Web.config文件,位置:C: ...

  9. android监听键盘

    android中的带有输入功能的页面布局经常被弹出的键盘遮挡,一种处理方法是监听键盘的弹出,设置布局的padding或隐藏某些占位控件,使得输入框不被键盘遮挡.一种常用的方法是当Activity设置为 ...

  10. M记单刷鸡盒副本

    今天去M记单刷鸡盒副本,听说此副本掉落最新道具:黑暗之门.鸡翅区和鸡块区全通无压力,鸡腿区难度最大,老一是个灭团点.现在肚子很难受,刚去厕所吐了一把,看来有点高估自己,此副本最好还是组队前往,单刷压力 ...