(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)好像有一处运行没有出错,就这一次通过编译了 )到底应该怎么实现这两个功能???

解决方案 »

  1.   

    1.搜索关键字:js 防止后退
    2.if (Session["userName"] == null)
      

  2.   

    是:if (Session["userName"] == null)而不是:if (Session["userName"] = null)注意语法错误!
      

  3.   

    第一个:
    设置页面缓冲
    Response.CacheControl = "Private";
    Response.Cache.SetExpires(DateTime.MinValue);
    这样,在客户端就不会缓冲页面,每一次访问页面都需要请求服务器第二个:
    你需要在登陆成功后,把用户信息记录在Session中,比如,Session["UserName"] = "123"
    你在页面中,需要检查访问者是否已经登陆
    if(Session["UserName"] == null)//是" == "不是 " = "
    {
        Response.Redirect("Default.aspx");
    }
      

  4.   

    if(Session["UserName"] == null)//是" == "不是 " = " 

        Response.Redirect("Default.aspx"); 

      

  5.   

    1)第二个问题我太粗心了,被大家一眼就看出了,还拿出来问太不好意思了!
    2)第一个问题”用Session.Abandon()没用,还是一点后退就返回了。
    对第二楼的:“搜索关键字:js 防止后退”我哦其实不是想禁止前进后退功能,在正常登陆进去以后完全可以前进后退,
    只是当点击注销以后就不能在简单的一点后退就返回到登陆状态了,必须重新登陆。就是希望实现一般论坛的注销功能。
    对第4楼的:
    在哪里添加这些代码然后怎么办呢?能说详细点吗?[code]code样式测试[/code]
      

  6.   

    1.建一个基类,继承自System.Web.UI.Page
    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");
                    }
                }
                ....
             }
      

  7.   

    你说Abandon不可以,实际上呢Abandon是可以的,它已经清空了你的Session
    但是之所以你说:点后退能回到登录状态,不对
    那是回到了缓存里的登录状态(此时是取得了IE的缓存,而没有到你的服务器去取数据),不信你可以按F5刷新一下,就可以看到不是登录状态了。要避免这种情况,按4楼的说法就可以了。
    加在每个页面的Page_Load里,这样就不会去读取IE的缓存了。