0

我正在研究存储TempData在一个更好的地方。有一个如何使用 MongoDB 执行此操作的演练,但用于存储的密钥(item.SessionIdentifier == controllerContext.HttpContext.Request.UserHostAddressIP 地址)显然不起作用,因为多个用户/会话可以共享相同的公共 IP。

使用 IP 作为密钥的后果是多个用户将看到(并删除)彼此的数据。特别是,在您的开发机器上进行测试期间,所有会话和浏览器实例都将共享相同的临时数据。

TempData在某些数据库中用于存储的好键是什么?

4

1 回答 1

0

当分配给对象时,而不是分配给 tempdata 直接调用下面的方法

public static string GetVisitorIPAddress(bool GetLan = false)
        {
            string visitorIPAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

            if (String.IsNullOrEmpty(visitorIPAddress))
                visitorIPAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

            if (string.IsNullOrEmpty(visitorIPAddress))
                visitorIPAddress = HttpContext.Current.Request.UserHostAddress;

            if (string.IsNullOrEmpty(visitorIPAddress) || visitorIPAddress.Trim() == "::1")
            {
                GetLan = true;
                visitorIPAddress = string.Empty;
            }

            if (GetLan && string.IsNullOrEmpty(visitorIPAddress))
            {
                //This is for Local(LAN) Connected ID Address
                string stringHostName = Dns.GetHostName();

                //Get Ip Host Entry
                IPHostEntry ipHostEntries = Dns.GetHostEntry(stringHostName);

                //Get Ip Address From The Ip Host Entry Address List
                IPAddress[] arrIpAddress = ipHostEntries.AddressList;

                try
                {
                    visitorIPAddress = arrIpAddress[arrIpAddress.Length - 2].ToString();
                }
                catch
                {
                    try
                    {
                        visitorIPAddress = arrIpAddress[0].ToString();
                    }
                    catch
                    {
                        try
                        {
                            arrIpAddress = Dns.GetHostAddresses(stringHostName);
                            visitorIPAddress = arrIpAddress[0].ToString();
                        }
                        catch
                        {
                            visitorIPAddress = "127.0.0.1";
                        }
                    }
                }
            }

            return visitorIPAddress.Split(',')[0].Trim();
        }
于 2017-04-26T11:27:36.197 回答