【转】从判断Session["UserName"].ToString()为null和""所想到的

Shiro Session管理实战:从核心原理到集群部署与强制下线实现 会话管理是Web应用安全与用户体验的基石,它通过在服务器端维护用户交互状态来实现身份保持。其核心原理是基于唯一的Session ID在客户端与服务器间建立关联,服务器据此存储用户特定数据。在Java生态中,Apache Shiro框架提供了强大且环境无关的会话管理抽象,其技术价值在于统一了Web与非Web环境下的操作接口,并支持精细化的生命周期控制。这使其在用户认证状态维护、多步骤流程数据暂存以及后台会话治理等应用场景中不可或缺。本文聚焦于Shiro Session的实战操作,深入解析如何通过Session 阅读详情

    http://famang.blog.hexun.com/17064375_d.html

 

Asp.net安全验证模式提供了验证用户访问的很好模式,但是还有很多情况下需要我们采用传统的Session方式来解决用户登录验证问题,比如一些简单的验证。今天打开优快云就发现了一个帖子,该帖子的楼主正在利用这种方式验证用户是否登陆,但是在这个过程中出现了错误,具体是怎么回事呢?

原来搂主想写个方法,该方法功能是判断用户是否登陆,如果没登陆,则自动跳转到登陆页面。楼主的具体判断条件是Session[“username”]是否为空,如果Session[“username”].ToString()为null或者为""则表示未登陆,跳转到一个提示页面。具体代码示例如下:

    public int IsUser()

    {

        if (Session["UserName"].ToString() == null || Session["UserName"].ToString() != null && Session["UserName"].ToString() == "")

        {

            //可能非有意的引用比较;若要获取值比较,请将左边转为类型string

            //Response.Redirect   ("../index.aspx");

            //Response.Write(" <script   language=javascript> alert('你不是管理员!');location.href='Default.aspx'; </script> ");

            return 1;

        }

        else

        {

            return 0;

        }

    }
   
楼主在运行这段代码的时候,vs2005始终出现提示"当前上下文中不存在session",这个是因为相应的代码环境和cs文件的位置所决定的,利用System.Web.HttpContext.Current.Session来调用Session即可。如果了解asp.net底层机制,我们就会发现,Session["UserName"],其实是HttpConText的属性,在aspx文件关联代码中,其提升为Page的属性,所以我们可以如此方便调用,而在非关联代码文件中,则必须通过System.Web.HttpContext.Current.Session方式调用。此时改正后的代码示例如下(不考虑逻辑问题):

    public int IsUser()

    {

        if (System.Web.HttpContext.Current.Session["UserName"].ToString() == null || System.Web.HttpContext.Current.Session ["UserName"].ToString() != null && System.Web.HttpContext.Current.Session ["UserName"].ToString() == "")

        {

            //可能非有意的引用比较;若要获取值比较,请将左边转为类型string

            //Response.Redirect   ("../index.aspx");

            //Response.Write(" <script   language=javascript> alert('你不是管理员!');location.href='Default.aspx'; </script> ");

            return 1;

        }

        else

        {

            return 0;

        }

    }

其实,这里还有问题,我们抛开如上问题和其中的逻辑错误问题不谈,有经验的程序员,一下子就会看出问题所在。让我们仔细分析一下,经过如上所说的修正,我们运行程序就会看到异常显示“未将对象引用设置到对象的实例”的错误,然后调试,发现了没有这个Session,因为还没有创建,所以更无法使用ToString()。这样我们明白了,在没登陆时,Session[“username”] =null,此时条件: Session[“username”].ToString()过程中,会出现异常。我们可以想到,如果把先判断Session[“username”] 是否为null,再判断楼主的条件,即可。

这里有两种方法,一种是在外层或前面再加一个if语句;另一种是采用&& 和||运算符(详见逻辑运算符用法),把Session[“username”] ==null放到楼主所写条件的前面,这是因为采用&& ||运算符并且Session[“username”] ==null在判断最前,因而程序先判断Session[“username”] =null,如果不满足条件,则不会继续判断后面的条件,如果满足条件,则继续判断后面的条件,而此时不具备出现异常的情况。采用如上所述方法程序程序会运行通过,无错误,符合功能需要(抛弃楼主条件中的逻辑错误)。此时修改后的代码示例(不考虑逻辑问题)如下:

    public int IsUser()

    {

        if ((System.Web.HttpContext.Current.Session["UserName"]==null)||System.Web.HttpContext.Current.Session["UserName"].ToString() == null || System.Web.HttpContext.Current.Session ["UserName"].ToString() != null && System.Web.HttpContext.Current.Session ["UserName"].ToString() == "")

        {

            //可能非有意的引用比较;若要获取值比较,请将左边转为类型string

            //Response.Redirect   ("../index.aspx");

            //Response.Write(" <script   language=javascript> alert('你不是管理员!');location.href='Default.aspx'; </script> ");

            return 1;

        }

        else

        {

            return 0;

        }

    }

如上只是解决了运行问题,从好的程序方面考虑,还有两个问题:

首先,楼主在处理Session转换为string类型时也可以采用(string)Session[“username”]的方式,此时Session[“username”]为null时,不会出现错误,就可不先判断Session[“username”]是否为null。

其次,楼主采用的验证字符串为null或""的方法很不好,应该采用如下方法:string.IsNullOrEmpty((string)Session["UserName"]),这个方法如果字符串为null或者"",则返回True,否则返回False。此时,很简洁,而且省去很多判断。

综合以上,这时,可以不判断Session ["UserName"]值为null的情况(如考虑则有助于减少实际运行时类型转换的次数),修改后的代码示例(修正了逻辑问题)如下:

    public int IsUser()

    {

        if (string.IsNullOrEmpty((string) System.Web.HttpContext.Current.Session ["UserName"]))

        {

            //可能非有意的引用比较;若要获取值比较,请将左边转为类型string

            //Response.Redirect   ("../index.aspx");

            //Response.Write(" <script   language=javascript> alert('你不是管理员!

JWT与Session认证选型实战:从协议原理到七维决策树 Web登录认证本质是在HTTP无状态协议上构建可信状态,核心方案围绕JWT(JSON Web Token)和Session+Cookie展开。JWT通过密码学签名将用户身份编码为可验证字符串,实现服务端无状态校验;Session则依赖服务端存储会话状态,由Cookie作为轻量级访问凭证。二者差异不在优劣,而在适用边界:JWT天然适配跨域、多端、无状态扩展场景,但面临Token吊销难、XSS风险高等挑战;Session凭借HttpOnly Cookie提供更强XSS防护与即时会话管控能力,却受限于SameSi 阅读详情

相关推荐

ASP.NET Session并发阻塞与无状态替代方案实战

Session是ASP.NET中用于维持用户会话状态的基础机制,其底层依赖标记接口、HttpModule管线和存储锁机制实现。然而,默认的InProc模式引发严重并发阻塞、内存泄漏与水平扩展瓶颈;StateServer/SQLServer则带来序列化开销与网络延迟。现代Web架构强调无状态设计,JWT令牌、Redis分布式缓存、MemoryCache双写等替代路径,可在保障登录态、购物车、临时数据等核心场景的同时,显著提升吞吐量与云原生兼容性。本文聚焦Session的锁等待实证、七宗罪归因及渐进式迁移策略,

天下无双 446

Session["userName"]与Session["userName"].ToString()是不一样的~~

今天调了个代码,发现老是跟预期的结果不一样,找了半天的原因,一个一个的往回找,终于逮出元凶了! 我今天才发现,下面两个是不一样的: //有问题的代码 if (Session["uid"] == oFormHR.AuthorizeId && formState != "流程校正中") { //.. } //正确的代码 if (Session...

weixin_30849403的博客 527

Java equals()与hashCode()契约原理与工程实践

在Java中,equals()和hashCode()并非普通工具方法,而是支撑哈希集合(HashMap、HashSet等)正确运行的核心契约。其原理源于JVM对象内存布局与哈希表桶定位机制:hashCode()决定对象存储位置,equals()负责桶内精确匹配;二者失配将直接导致get()失效、重复插入或缓存击穿。该契约深刻影响分布式缓存、ORM映射与序列化等关键场景。掌握其五项黄金法则与31质数哈希技巧,结合Record类或IDE智能生成,可规避90%以上线上集合类故障。本文聚焦Java开发者高频踩坑点与

weixin_30314793的博客 343

typescript 枚举值与number比较报错

typescript学习中遇到获取枚举值返回类型错误的问题

xiaoxuechi的博客 4811

基于Session与国密SM2的前后端敏感数据加密传输方案

在Web应用开发中,数据传输安全是保障用户隐私和系统安全的核心环节。其基本原理是通过加密算法将明文信息转换为密文,确保数据在传输过程中即使被截获也无法被直接解读。非对称加密技术因其公钥可公开、私钥需保密的特性,在密钥分发和身份验证场景中具有重要价值。国密SM2算法作为我国自主设计的椭圆曲线公钥密码标准,在同等安全强度下较RSA等传统算法具有密钥更短、运算更快、合规性更强的优势,尤其适用于Web应用中对敏感数据的加密传输。本文聚焦于解决前后端交互中敏感查询参数(如手机号)明文传输的安全隐患,提出一种将会话管理

weixin_33739627的博客 473

CTF Web实战:从基础绕过到PHP反序列化与Flask Session伪造的九大核心技巧

在网络安全领域,Web安全是核心方向之一,涉及对Web应用漏洞的挖掘与利用。其原理在于攻击者通过构造恶意输入,利用应用程序逻辑或处理缺陷,实现未授权访问、信息泄露或命令执行。掌握Web安全技术对于提升系统防护能力、理解攻击链至关重要,广泛应用于渗透测试、CTF竞赛和安全研发等场景。本文聚焦CTF Web实战,深入剖析PHP伪随机数预测、反序列化POP链构造等关键技术。通过解析mt_rand()函数的确定性特征,演示如何从已知输出反推种子;同时,详解利用PHAR协议及魔术方法链(如__destruct、__t

weixin_30335353的博客 448

php设置数组大小_php里面Session的使用方法详解

Session的声明与使用Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_start()。session_start()函数的语法格式如下:  Bool session_start(void) //创建Session,开始一个会话,进行Session初始化  注意:session_start()函数之前不能有任何输出当第一次访问网站时,Seesion_star...

weixin_39881387的博客 449

GhidrAssist:AI驱动的逆向工程助手实战指南

逆向工程是分析软件内部工作原理、理解二进制代码逻辑的关键技术,广泛应用于软件安全、恶意代码分析和漏洞挖掘等领域。其核心原理在于通过反编译、控制流与数据流分析等手段,将机器码还原为可理解的高级语言表示。传统逆向分析高度依赖人工经验,面对海量代码时效率低下且易出错。随着大语言模型(LLM)技术的发展,其强大的代码理解与推理能力为自动化逆向分析提供了新的可能。通过将LLM与成熟的逆向工程框架(如Ghidra)相结合,可以构建智能辅助系统,实现代码意图的自动解释、变量/函数的智能重命名以及潜在漏洞模式的辅助识别,从

weixin_42547335的博客 596

js获取session中保存的对象值(jquery)

如何在js中获取到存储在session中的值。 在写jsp页面时遇到问题: 需要在js中获取到存储在session中的值,session中存储的可能是一个字符串也可能是一个对象。 获取方法如下: <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text...

hunt_er的博客 1万+

win11一直弹出用户账户控制怎么解决

用户帐户控制简称UAC,是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。近期有部分Win11用户想要关闭UAC,但是不知道应该如何操作,对此下面我就教给大家操作方法,大家可以去尝试看看。...

xitongzhijia_abc的博客 5万+

智能车竞赛飞檐走壁组立体赛道电磁引导线设计与实现

本文深入解析了智能车竞赛飞檐走壁组立体赛道电磁引导线的核心设计与实现。针对垂直面、圆筒、跷跷板等立体元素,详细阐述了电磁线规格参数选择、三维空间铺设技巧及磁场调试方法,旨在帮助参赛队伍打造稳定可靠的导航系统,提升车模在复杂立体赛道上的通过率与稳定性。

bert9linguist的博客 281

关于Session为null的问题。。。

具体判断条件是Session[“username”]是否为空,如果Session[“username”].ToString()为null或者为""则表示未登陆,跳转到一个提示页面。具体代码示例如下: public int IsUser() { if (Session["UserName"].ToString(...

weixin_33862041的博客 1269

Arcmap计算土方量教程

1. 创建现状TIN 结果数据: 2. 创建设计TIN 结果数据: 注意:现状TIN和设计TIN构建时候的坐标系不同,设置坐标系见最后的注意事项第1点,就是import(导入)那步骤,现状TIN构建时选择高程点数据或者等高线数据,设计TIN构建时候选择洱海面数据 3. TIN转栅格 改成你要存的数据库,注意中间不要有汉字 结果数据(设计TIN转栅格的同理) 4. 裁剪现状TIN转成的栅格 结果数据: 5. 计算土方量 结果数据: ...

欢迎关注,共同进步! 5015

web应用技术第2次课-个人网站 (主要练习JSP的request对象和session对象)

本项目是一个基于 JSP 的 Web 练习项目,采用 Maven 构建并以 WAR 包形式部署。项目实现了注册、登录、会话管理、权限页面访问控制,以及九九乘法表展示等基础功能。

wyhwust的博客 936

Android 系统低内存lowmemorykiller关于阈值修改 minfreeAbsKbytes优化

在系统rom定制化开发中,在对于运行内存ram 1G和2G的设备中,对于内存使用高峰期时,minfreeAbsKbytes优化很关键 调整合理的minfree,让内存合理的使用很关键,接下来分析相关功能的实现

安卓兼职framework和app工程师的博客 524

Spatial-ORMLLM: Improve Spatial Relation Understanding in the Operating Room with Multimodal Larg...

手术室(OR)中的精准空间建模是众多临床任务的基础,可为术中感知、风险规避及手术决策提供支持。现有方法虽利用大规模多模态数据集进行 latent 空间对齐,以隐式学习空间关系,但却忽视了多模态大型语言模型(MLLM)的3D能力。然而,这种方法存在两个问题:1)手术室通常缺乏多台视频和音频传感器,多模态3D数据难以获取;2)仅依赖易获取的2D数据训练,无法捕捉复杂场景中的细粒度细节。为解决这一问题,我们提出——首个针对手术室3D空间推理的大型视觉语言模型。

UnknownBody_2的博客 592

Session的使用

1、基类public abstract class LoginUserBaseBase:System.Web.UI.Page    {        ///         /// 当前用户的用户ID        ///         protected internal int UserID=-1;        ///         /// 当前用户的用户

深海狂鲨 647

【RT-DETR有效改进】轻量级网络ShuffleNetV2(附代码+修改教程)

从今天开始正式开始更新RT-DETR剑指论文专栏,本专栏的内容会迅速铺开,在短期呢大量更新,价格也会乘阶梯性上涨,所以想要和我一起学习RT-DETR改进,可以在前期直接关注,本文专栏旨在打造全网最好的RT-DETR专栏为想要发论文的家进行服务。RT-DETR剑指论文专栏,持续复现各种顶会内容——论文收割机RT-DETR​​。

Snu77的博客 1996

Shiro Session管理实战:从原理到集群配置与性能优化

在Java Web开发中,Session管理是维护用户状态、保障应用安全的核心机制。其原理基于服务器端存储用户会话信息,通过Session ID实现客户端与服务器状态的关联,在分布式系统中尤为重要。这项技术的价值在于支撑用户身份保持、访问控制及个性化体验,广泛应用于电商、社交、企业后台等需要登录态管理的场景。本文聚焦Apache Shiro框架的Session管理,深入探讨其架构设计,并结合Redis实现集群Session共享,解决分布式环境下的状态同步问题。文中详细解析了Session固定攻击防御、序列化

weixin_30291791的博客 332

以 Cloud 为核心的设备 mTLS 证书体系:从产品需求到 OP-TEE 安全落地

本文探讨了以云端为核心的物联网设备mTLS证书体系构建方案。文章从产品需求出发,分析了云端必须采用mTLS+证书体系管理设备身份的原因,指出静态Token方案的三大缺陷:身份不可控、运营不可控和审计不可控。重点阐述了mTLS在产品中的核心功能是加密传输和双向认证,并详细列出了云端PKI、设备注册中心等必备组件。在设备侧,强调必须通过OP-TEE技术保护私钥安全,提出了一个包含密钥生成、CSR导出等功能的TA设计方案。最后,文章给出了云端端到端流程示例,说明如何将证书生命周期管理转化为可运营的产品能力,包括自

Interview_TC的博客 642

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

学习日志(五)【php反序列化全加例题】【pop链,字符逃逸,session,伪协议】

触发时机:实例化对象(执行new关键字)时,自动执行。功能:初始化对象,常用于给属性赋值、初始化资源。注意:序列化、反序列化过程中不会触发。phpecho "触发了构造函数1次";// 实例化,触发构造函数(输出对应内容)// 序列化,不触发// 反序列化,不触发?HTTP协议本身是无状态的——服务器默认无法识别多个请求是否来自同一个用户。Session就是为解决这个问题诞生的:它是服务器为每个客户端创建的唯一服务器端存储对象。

tryqaaa_的博客 301

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ASP.NET Session锁导致的幽灵慢:原理与实战解法

Session状态管理是Web应用中保障用户数据一致性的基础机制,其底层依赖于请求线程对会话对象的同步访问控制。在ASP.NET Framework中,该机制通过IRequiresSessionState和IReadOnlySessionState接口显式声明读写契约,但默认Page类自动启用排他写锁,导致非页面类请求(如图片、验证码、API)隐式排队阻塞。这种框架层的悲观锁设计不消耗CPU或IO资源,因而逃逸于常规APM监控,却在高并发同SessionID场景下引发不可预测的长延时。本文聚焦Session

世范水晶 222

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Session、Token与JWT登录方案全解析:从原理到实战选型指南

在Web开发与API设计中,用户认证与状态管理是构建安全、可扩展系统的核心基础。其原理在于服务器需要一种可靠机制来识别和验证客户端请求的身份。传统的服务器端Session将会话数据存储在服务端(如Redis),通过Session ID进行关联,实现了对登录状态的强控制,但存在扩展性和跨域挑战。基于Token的Session方案(或称不透明Token)将随机令牌与服务器端存储结合,在保留控制权的同时,更好地支持了现代前后端分离架构和移动应用。而JWT(JSON Web Token)则采用客户端存储和密码学签名

weixin_34080951的博客 379

从登录体验优化说起:Spring Boot项目中如何安全地实现“7天免登录”功能?

本文深入探讨了在Spring Boot项目中安全实现'7天免登录'功能的最佳实践。通过分析Cookie、Session与Token的协同机制,结合Remember-Me功能的安全配置和Redis高性能存储方案,帮助开发者在保障系统安全的同时优化用户登录体验。

weixin_30873847的博客 428
上一篇: 【转】遍历文件夹内的所有文件和子文件
下一篇: ASPxComboBox使用说明
rbwang
博客等级 码龄19年 19粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值