FineUI 官方论坛

标题: session失效后页面跳转问题 [打印本页]

作者: yan    时间: 2012-6-14 15:41
标题: session失效后页面跳转问题
当session失效时跳转到登录页,但是却在tab部分的在跳转,想要的效果是整个页面跳。
[attach]679[/attach]

[attach]681[/attach]

想要的效果是如下图:就如刚进入系统的登录页一样
[attach]680[/attach]

求助!!!!!!

前后代码:
<extageManager ID="ageManager1" runat="server" AutoSizePanelID="RegionPanel1" />
    <ext:RegionPanel ID="RegionPanel1" runat="server" ShowBorder="false">
        <Regions>
            <ext:Region ID="Region1" Margins="0 0 0 0" Height="62px" ShowBorder="false" ShowHeader="false"
                Position="Top" Layout="Fit" runat="server">
                <Toolbars>
                    <ext:Toolbar ID="Toolbar1" Position="Bottom" runat="server">
                        <Items>
                            <ext:ToolbarFill ID="ToolbarFill1" runat="server">
                            </ext:ToolbarFill>
                            <ext:ToolbarText ID="ToolbarText4" Text="欢迎您 " runat="server">
                            </ext:ToolbarText>
                            <ext:ToolbarText ID="tbtUserName" Text=" " runat="server">
                            </ext:ToolbarText>
                            <ext:Button ID="btnSourceCode" Text="修改密码" EnablePostBack="true"
                                runat="server" Type="Button">
                            </ext:Button>
                            <ext:ToolbarSeparator ID="ToolbarSeparator1" runat="server">
                            </ext:ToolbarSeparator>
                            <ext:Button ID="btnExit" ConfirmText="确认退出系统吗?" Text="安全退出" EnablePostBack="true"
                                runat="server" Type="Submit">
                            </ext:Button>
                        </Items>
                    </ext:Toolbar>
                </Toolbars>
                <Items>
                    <ext:ContentPanel ShowBorder="false" ShowHeader="false" BodyStyle="background-color:#1C3E7E;"
                        ID="ContentPanel3" runat="server">
                            <div style="height:5px;"></div>
                        <div style="float:left; color:White;">
                            <aspabel ID="Label3" runat="server" Text="系统" Font-Bold="true" Font-Size="18px" ></aspabel>
                        </div>
                    </ext:ContentPanel>
                </Items>
            </ext:Region>
            <ext:Region ID="reLeft" Split="true" EnableSplitTip="true" CollapseMode="Mini" Width="200px"
                Margins="0 0 0 0" ShowHeader="true" Title="菜单栏" EnableLargeHeader="false" Icon="Outline"
                EnableCollapse="true" Layout="Fit" Position="Left" runat="server">
                <Items>
                </Items>
            </ext:Region>
            <ext:Region ID="mainRegion" runat="server" Position="Center" Layout="fit" Margins="0 0 0 0"
                ShowHeader="false" Title="">
                <Items>
                    <ext:TabStrip ID="mainTabStrip" EnableTabCloseMenu="true" ShowBorder="false" runat="server">
                        <Tabs>
                            <ext:Tab ID="Tab1" Title="首页" Layout="Fit" Icon="House" runat="server">
                                <Items>
                                    <ext:ContentPanel ID="ContentPanel1" ShowBorder="false" BodyPadding="10px" ShowHeader="false" AutoScroll="true"
                                        CssClass="intro" runat="server">
                                        <img src="images/bg006.jpg" alt="" />
                                        <img src="images/bg001.jpg" alt="" style="float:right" />
                                    </ext:ContentPanel>
                                </Items>
                            </ext:Tab>
                        </Tabs>
                    </ext:TabStrip>
                </Items>
            </ext:Region>
        </Regions>
    </ext:RegionPanel>

作者: ☆幻~精灵    时间: 2012-6-16 06:40
这个应该是后台事件,你贴前台代码干嘛呢?用js的话,直接window.top.locaiton.href='Login.apsx'就可以了呀!
作者: yan    时间: 2012-6-19 09:33
☆幻~精灵 发表于 2012-6-16 06:40
这个应该是后台事件,你贴前台代码干嘛呢?用js的话,直接window.top.locaiton.href='Login.apsx'就可以了 ...

每个页面的后台都是这样写的:
protected void Page_Load(object sender, EventArgs e)
    {
        UserInfo user = (UserInfo)Session["USER"];//获得登陆用户信息
        if (!IsPostBack)
        {
            if (user != null)
            {
               
            }
            else
            {
                Response.Redirect("~/Login.aspx");
                //FormsAuthentication.RedirectToLoginPage();//返回主页
            }
        }
    }
作者: 易水临风    时间: 2012-6-20 11:25
PageContext.RegisterStartupScript("window.top.locaiton.href='Login.apsx'");
作者: ☆幻~精灵    时间: 2012-6-20 13:26
yan 发表于 2012-6-19 09:33
每个页面的后台都是这样写的:
protected void Page_Load(object sender, EventArgs e)
    {

这样的操作完全可以放在继承自System.Web.UI.Page的父类中去重写Init方法实现。然后每个WebForm继承自该类,就自动进行了Session验证。

看了你的这个方法,这个方法,貌似不一定能完全跳出框架页。需要在这里,根据,每次页面的相对url进行判断。然后利用ClientScript注册前台js事件去执行。方法如下:window.top.location.href=''
作者: ☆幻~精灵    时间: 2012-6-20 13:29
分享下,我的Session失效判断(对于弹出窗体无效)。
string url = Request.RawUrl;
        int count = url.Split('/').Length;
        string toUrl = "";
        for (int i = 0; i < count - 3; i++)
        {
            toUrl += "../";
        }
        toUrl += "Login.aspx";
        ExtAspNet.Alert.ShowInParent("登陆信息失效!请重新登陆!", "友情提示", ExtAspNet.MessageBoxIcon.Information, "top.location.href='" + toUrl + "'");
作者: 啃O    时间: 2012-6-20 14:42
我的是写到类里了

public class UserHelper
    {
        public static UserInfo OnlineUser
        {
            get
            {
                try
                {
                    if (HttpContext.Current.Session["UserID"] != null)
                    {
                        int UserID = Convert.ToInt32(HttpContext.Current.Session["UserID"]);
                        return UserInfo.Load(UserID);
                    }
                    else
                    {
                        System.Web.UI.Page page = (System.Web.UI.Page)HttpContext.Current.Handler;
                       
                        page.Response.Redirect("~/login.aspx");
                        return (UserInfo)null;
                       
                    }
                }
                catch {
                    System.Web.UI.Page page = (System.Web.UI.Page)HttpContext.Current.Handler;
                    page.Response.Redirect("~/login.aspx");
                    return (UserInfo)null;
                }
               
            }
        }
作者: ☆幻~精灵    时间: 2012-6-20 15:24
啃O 发表于 2012-6-20 14:42
我的是写到类里了

public class UserHelper

你这样的写法,多用户的时候,会不会被覆盖呢?static实例,可只有一个呢!第二个登陆用户,难道不会将第一个的登陆用户的登陆信息修改掉吗?
作者: 啃O    时间: 2012-6-20 15:32
本帖最后由 啃O 于 2012-6-20 15:38 编辑

Session是服务器与本机的会话 应该不会,具体多用户还真没详细测试过 精灵的方法得每个页面都得用代码判断
作者: 啃O    时间: 2012-6-20 15:36
其实也可以不设置成静态的 在使用时从新new一个就行了
作者: ☆幻~精灵    时间: 2012-6-20 15:59
啃O 发表于 2012-6-20 15:32
Session是服务器与本机的会话 应该不会,具体多用户还真没详细测试过 精灵的方法得每个页面都得用代码判断 ...

Session是不会,不过static UserInfo实体,就会出现。你可以用两个浏览器登陆,当第二个用户登陆后,你刷新第一个用户,它的信息会变成第二个用户登陆的信息。我觉得呢,采用继承父类的方式,好过用静态类的方式!
作者: ☆幻~精灵    时间: 2012-6-20 16:01
啃O 发表于 2012-6-20 15:36
其实也可以不设置成静态的 在使用时从新new一个就行了

使用时,new一个,是比较常规的做法,不过,会增加数据库的访问频率。可以新建一个用户信息实体,在登陆时,实例化,然后存储都Session中,这样的话,不知道会不会影响传输性能!
作者: 啃O    时间: 2012-6-20 16:21
☆幻~精灵 发表于 2012-6-20 16:01
使用时,new一个,是比较常规的做法,不过,会增加数据库的访问频率。可以新建一个用户信息实体,在登陆 ...

都存储到session中不太可行 我的userinfo有10来个属性 都放的话服务器会受不了的
作者: ☆幻~精灵    时间: 2012-6-22 10:07
啃O 发表于 2012-6-20 16:21
都存储到session中不太可行 我的userinfo有10来个属性 都放的话服务器会受不了的 ...

静态肯定是不可取的。我在应用上是采取的Session存储用户Id。然后重写Init方法,查询到用户实体。
作者: yan    时间: 2012-6-26 12:11
啃O 发表于 2012-6-20 14:42
我的是写到类里了

public class UserHelper

是每个面页调用这个类吗?




欢迎光临 FineUI 官方论坛 (https://www.fineui.com/BBS/) Powered by Discuz! X3.4