zoukankan      html  css  js  c++  java
  • MVC 访问IFrame页面Session过期后跳转到登录页面

    一、Web端开发时,用户登录后往往会通过Session来保存用户信息,Session存放在服务器,当用户长时间不操作的时候,我们会希望服务器保存的Session过期,这个时候,因为Session中的用户信息取不到了,就需要用户重新登录,重新保存Session。

    Web在登出的时候可以通过HttpSession.Invalidate()//使所有Session作废

    Asp.net MVC提供了过滤器,让我们可以很方便的控制访问Action时要处理的事情,针对Session过期后页面跳转,我们可以封装一下Controller的OnActionExecuting方法作为基Controller,如下:

    public class BaseController : Controller
        {
           protected User UserInfo
            {
                set
                {
                    Session["UserInfo"] = value;
                }
    
                get
                {
                    if (Session["UserInfo"] == null)
                    {
                        return null;
                    }
                    else
                    {
                        return (User)Session["UserInfo"];
                    }
                }
            }
    
            protected override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                #region Session判断
                if (UserInfo==null && !filterContext.ActionDescriptor.ActionName.Contains("Login"))
                {
                    filterContext.Result = new RedirectResult("/Home/Login");
                    return;
                }
                #endregion
    
                base.OnActionExecuting(filterContext);
            }
     }
    

      但是,这儿的new RedirectResult("/Home/Login");只是把Action的返回指向为了/Home/Login,如果用户操作的页面是嵌套在iframe中,这个时候,只是iframe的指向改变了,问不是地址栏的指向改变了,针对这种情况,可在前台页面/Home/Login做限制,如下:

    @{
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>系统-登录</title>
        <link href="/Content/login.css" rel="stylesheet" />
    
        <script type="text/javascript">
            $(function () {
               //判断一下当前是不是做顶层,如果不是,则做一下顶层页面重定向
                if (window != top) {
                    top.location.href = location.href;
                }
            });   
        </script>
    </head>
    <body>
    </body>
    </html>
    

    参照如下:http://blog.csdn.net/u012251421/article/details/50332513  

    二、在asp.net mvc我们在记录日志的时候,经常会考虑记录访问者的ip地址,即客户端的ip地址,以下是一个参考的获取ip地址的方式:

    /// <summary>
            /// 获取web客户端ip
            /// </summary>
            /// <returns></returns>
            public static string GetWebClientIp()
            {
    
                string userIP = "未获取用户IP";
    
                try
                {
                    if (System.Web.HttpContext.Current == null
                     || System.Web.HttpContext.Current.Request == null
                     || System.Web.HttpContext.Current.Request.ServerVariables == null)
                    {
                        return "";
                    }
    
                    string CustomerIP = "";
    
                    //CDN加速后取到的IP simone 090805
                    CustomerIP = System.Web.HttpContext.Current.Request.Headers["Cdn-Src-Ip"];
                    if (!string.IsNullOrEmpty(CustomerIP))
                    {
                        return CustomerIP;
                    }
    
                    CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    
                    if (!String.IsNullOrEmpty(CustomerIP))
                    {
                        return CustomerIP;
                    }
    
                    if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
                    {
                        CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                       
                        if (CustomerIP == null)
                        { 
                            CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 
                        }
                    }
                    else
                    {
                        CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                    }
    
                    if (string.Compare(CustomerIP, "unknown", true) == 0 || String.IsNullOrEmpty(CustomerIP))
                    {
                        return System.Web.HttpContext.Current.Request.UserHostAddress;
                    }
                    return CustomerIP;
                }
                catch { }
    
                return userIP;
    
            }

    参考地址:http://www.cnblogs.com/purplefox2008/p/5983957.html

  • 相关阅读:
    团队冲刺第八天
    团队冲刺第七天
    团队冲刺第六天
    团队冲刺第五天
    找水王
    团队冲刺第四天
    团队冲刺第三天
    团队冲刺第二天
    团队冲刺第一天
    spring冲刺计划
  • 原文地址:https://www.cnblogs.com/lcawen/p/6235735.html
Copyright © 2011-2022 走看看