(1) 我现在做的一个系统存在这样的一个问题,当用户退出系统后,不用再次身份验证而直接通过浏览器的“后退”就进去了,怎样才能解决这种情况呢?
在网上查到有人说session.invalidate()可以,但是我在VS2005里面根本就找不到Session具有这个方法?出现下面错误:
(编译器错误信息: CS0117: “System.Web.SessionState.HttpSessionState”并不包含“invalidate”的定义)
(2)要防止别人直接在通过地址栏进入页面而不用登陆,在网上也有人说可用Session["userName"] = null,但是
我在每个页面的PageLoad()中加if (Session["userName"] = null) Response.Redirect("Default.aspx");判断
但是这样编译器错误信息: CS0266: 无法将类型“object”隐式转换为“bool”。存在一个显式转换(是否缺少强制转换?)
我再用if(Session["userName"].ToString()= null)或者Session["userName"].ToString()="")结果任然出错:
编译器错误信息: CS0131: 赋值号左边必须是变量、属性或索引器
(注:if (Session["userName"] = null)好像有一处运行没有出错,就这一次通过编译了 )到底应该怎么实现这两个功能???
在网上查到有人说session.invalidate()可以,但是我在VS2005里面根本就找不到Session具有这个方法?出现下面错误:
(编译器错误信息: CS0117: “System.Web.SessionState.HttpSessionState”并不包含“invalidate”的定义)
(2)要防止别人直接在通过地址栏进入页面而不用登陆,在网上也有人说可用Session["userName"] = null,但是
我在每个页面的PageLoad()中加if (Session["userName"] = null) Response.Redirect("Default.aspx");判断
但是这样编译器错误信息: CS0266: 无法将类型“object”隐式转换为“bool”。存在一个显式转换(是否缺少强制转换?)
我再用if(Session["userName"].ToString()= null)或者Session["userName"].ToString()="")结果任然出错:
编译器错误信息: CS0131: 赋值号左边必须是变量、属性或索引器
(注:if (Session["userName"] = null)好像有一处运行没有出错,就这一次通过编译了 )到底应该怎么实现这两个功能???
2.if (Session["userName"] == null)
设置页面缓冲
Response.CacheControl = "Private";
Response.Cache.SetExpires(DateTime.MinValue);
这样,在客户端就不会缓冲页面,每一次访问页面都需要请求服务器第二个:
你需要在登陆成功后,把用户信息记录在Session中,比如,Session["UserName"] = "123"
你在页面中,需要检查访问者是否已经登陆
if(Session["UserName"] == null)//是" == "不是 " = "
{
Response.Redirect("Default.aspx");
}
{
Response.Redirect("Default.aspx");
}
2)第一个问题”用Session.Abandon()没用,还是一点后退就返回了。
对第二楼的:“搜索关键字:js 防止后退”我哦其实不是想禁止前进后退功能,在正常登陆进去以后完全可以前进后退,
只是当点击注销以后就不能在简单的一点后退就返回到登陆状态了,必须重新登陆。就是希望实现一般论坛的注销功能。
对第4楼的:
在哪里添加这些代码然后怎么办呢?能说详细点吗?[code]code样式测试[/code]
2.在基类中重写Page_Load方法,检查Session
3.其他页面又继承自这个基类,这样无论你怎么按后退,都会执行基类的Page_load public class UICBase : System.Web.UI.Page
{ ///--------------------------------------------------------------------------
///
/// 機能 :画面初期ロード
///
/// 返り値 :なし
///
/// 引き数 :e - イベントデータ
///
/// 作成日 :2008年7月3日
///
/// 作成者 :
///
/// 機能説明 :画面初期ロードを行う。
///
/// 注意事項 :なし
///
///--------------------------------------------------------------------------
protected override void OnLoad(EventArgs e)
{
try
{
string strWebUrl = GetWebUrl(Request.Url.AbsolutePath);
// ログインしていない場合
if (Session["objSession"] == null && !(strWebUrl=="Login.aspx"
||strWebUrl=="SystemError.aspx"))
{
Response.Redirect("~/Login.aspx");
}
}
....
}
但是之所以你说:点后退能回到登录状态,不对
那是回到了缓存里的登录状态(此时是取得了IE的缓存,而没有到你的服务器去取数据),不信你可以按F5刷新一下,就可以看到不是登录状态了。要避免这种情况,按4楼的说法就可以了。
加在每个页面的Page_Load里,这样就不会去读取IE的缓存了。