再发一次,不知道有没有人帮忙一下啊,
vs2005我在app_data文件夹里面建了一个class1.cs这个类,
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;
}
}
提示"当前上下文中不存在session"。
我的目的是,想在每个页面都调用这个isuser方法。如果session为空的话,转到登录页面,这种方法好吗? --------------------编程问答-------------------- if (this.Session["UserName"] != null)
判断语句写这个 --------------------编程问答-------------------- using System; --------------------编程问答-------------------- 先要判断 Session["UserName"] 是不是为空
Session["UserName"]==null --------------------编程问答-------------------- if(string.IsNullOrEmpty(Session["UserName"].ToString())
{
//可能非有意的引用比较;若要获取值比较,请将左边转为类型string
//Response.Redirect ("../index.aspx");
//Response.Write(" <script language=javascript> alert('你不是管理员!');location.href='Default.aspx'; </script> ");
return 1;
}
else
{
return 0;
}
可以用這個方法判斷string.IsNullOrEmpty()是否為空""或者為null --------------------编程问答-------------------- public int IsUser()
{
if ( Session["UserName"].ToString()!=null)
{
//可能非有意的引用比较;若要获取值比较,请将左边转为类型string
//Response.Redirect ("../index.aspx");
//Response.Write(" <script language=javascript> alert('你不是管理员!');location.href='Default.aspx'; </script> ");
return 1;
}
else
{
return 0;
}
}
--------------------编程问答-------------------- 晕 楼上全部不对!!!
不在问题点子上
你按照下面的写:
System.Web.SessionState.HttpSessionState Session = System.Web.HttpContext.Current.Session
然后用楼上几位的方法
你的类是写在CS文件里的,Session不是那样获取的
想知道为什么自己查MSDN~~~~ --------------------编程问答-------------------- 必须穿入当前的page,然后判断page.Session[""] --------------------编程问答-------------------- 上面的方法,都不行啊,我晕了, --------------------编程问答-------------------- 楼主和众多回答者让人晕了N次,6楼的就是正解,哪里还来什么问题?!
一般不在页面的代码或者是asmx里,session和application都调用System.Web.HttpContext.Current.Session(application)的。 --------------------编程问答-------------------- 不要再拿ToString来当宝贝了!
当Session["UserName"]为null的时候,下面的会报错的:
Session["UserName"].ToString() == null
你可以这样判断:
if (Session["UserName"]!=null)
{
....
}
或
if (Session["UserName"] is string && string.IsNullOrEmpty((string)Session["UserName"]))
{
...
}
--------------------编程问答-------------------- 对于判断session为空的问题,也即通过判断其如下几种情况:
1、是否为null
为空条件是:Session["UserName"]==null
2、是否为空字符串(可能很多人在退出的代码中将其赋值给空字符串,所以要这么判断。如果在退出时,采用赋为null的方法,则不用判断这一点)
因为Session["UserName"]不是string类型,所以要先转换为string来判断。我们知道在转换为string的过程中,如果Session["UserName"]==null,那么会抛出异常,所以应该先判断Session["UserName"]是否为null。
剩下的工作既是判断其是否为空字符串的过程。建议使用如下方法,字符串为空字符串判断条件是:string.IsNullOrEmpty((string)Session["UserName"])
1和2只要满足其一,即为或的关系,才能是未登陆情况。又因为先后判断的关系,利用||操作符,只有第一个条件满足时,才去判断第二个,所以不会出现异常。最终判断未登录的条件如下示例:
if((session["UserName"]==null)||(string.IsNullOrEmpty((string)Session["UserName"])))
{
未登录的处理
}
建议在退出设置中,将session["UserName"]设置为null。那么只判断1即可。如下:
if(session["UserName"]==null)
{
未登录的处理
}
--------------------编程问答-------------------- 靠,都还不知道Session是否存在,就做了Session["*"]ToString(),你够强。
if(Session["*"] != null)
{
// code here ...
} --------------------编程问答-------------------- 搂主要解决的是用Session处理登录问题,因为退出时的处理方式不同,可有如下两种方法:
一、方法一
在退出登录时,设置session为空字符串。
此种情况下,对于判断session为空的问题,需要如下两种情况:
1、是否为null
为空条件是:Session["UserName"]==null
2、是否为空字符串(可能很多人在退出的代码中将其赋值给空字符串,所以要这么判断。如果在退出时,采用赋为null的方法,则不用判断这
一点)
这个问题分为两步:
转换为string类型,判断其为null和""的情况。
因为Session["UserName"]不是string类型,所以要先转换为string来判断。我们知道在转换为string的过程,如果利用ToString转换,如果
Session["UserName"]==null,那么会抛出异常,所以应该先判断Session["UserName"]是否为null。如果利用(string)Session["UserName"],
则不会出现异常。从这里分析,我们发现情况越来越复杂了。至此,可以分出两种情况:
1)使用Session["UserName"].ToString()方法
这时要先判断Session["UserName"]==null的情况
2)使用(string)Session["UserName"]方式。
这时不需要先判断是否为空也可以。
判断其为null或""
剩下的工作既是判断其是否为空字符串的过程。建议使用如下方法,字符串为空字符串判断条件是:string.IsNullOrEmpty((string)Session
["UserName"]),这种方法判断null和“”两种情况,如果分写相当于:(((string)Session["UserName"])==null)||(((string)Session
["UserName"]).Trim()="")
结论部分:
对于采用这种方式,表示退出登录。1和2只要满足其一,即为或的关系,就是未登陆情况。
如果采用Tostring()转换,因为先后判断的关系,利用||操作符,只有第一个条件满足时,才去判断第二个,所以不会出现异常。最终判断未
登录的条件如下示例:
if((session["UserName"]==null)||(string.IsNullOrEmpty(Session["UserName"].ToString())))
{
未登录的处理
}
如果采用(string)Session["UserName"])方式转换
if((session["UserName"]==null)||(string.IsNullOrEmpty((string)Session["UserName"])))
{
未登录的处理
}
如前分析因为不会抛出异常,所以我们发现这两个条件似乎有些重复。可以省略第一个条件。但是如果省略第一个条件很多情况下,会增加一
些系统的负担。因为每次都要进行类型的转换。
二、方法二,
在退出设置中,将session["UserName"]设置为null。那么只判断如上所述1即可。如下:
if(session["UserName"]==null)
{
未登录的处理
}
这种方法,少去许多判断,性能好。
我认为方法二是较好的做法。
但是从对方法一的研究中,我们能学到很多东西。即Session的类型问题,正是没有清楚认识到其类型问题
在判断上出现了错误。同时也学习到了ToString()方法的异常问题。更重要的是,判断对象为空的问题,
--------------------编程问答-------------------- 晕 乱七八糟的都写了什么啊~~~~~~~~~~~
=============================================================
LZ说:vs2005
我在app_data文件夹里面建了一个class1.cs这个类
=============================================================
应该是在app_code中吧?
如果是,那么:
public int IsUser()
{
System.Web.SessionState.HttpSessionState Session = System.Web.HttpContext.Current.Session;
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;
}
}
如果是在app_data中,那么请把它放到app_code中~~~~~
--------------------编程问答-------------------- Session["UserName"].ToString() == null
这个也不对,要写成
Session["UserName"] == null
要知道null是不能ToString的~~~ --------------------编程问答-------------------- if ((string)Session["UserName"] == "" || (string)Session["UserName"] == null)
{
未登录的处理
}
这样就可以啦 --------------------编程问答-------------------- 你在哪里定义的session? 去看一下对不对,名称有没有写错
补充:.NET技术 , ASP.NET