会话特定于什么?为什么不将IP和域名会话视为相同?

克里斯·屋顶

我想知道会话特定于什么?这不限于一种语言。波纹管仅以php为例。

我使用php session,当我使用我的网站域名时效果很好。为了在Windows OS上的本地vmvare ubuntu中测试网站,我更改了Windows的主机以将DNS设置为本地ip。测试本地时,我使用域名,它也很好用。但是,当我在浏览器中将URL更改为Ip时,会话丢失了。

您可能会混淆为什么要这样做,因为我还要在我的android设备上测试该页面,因为如果没有android root,我将无法更改android设备的hosts文件,因此我必须使用ip。

您可能还会感到困惑,为什么我不能一直使用ip?因为我在Web应用程序中使用了第三个打开的​​登录名。第三个打开的​​登录桅杆使用域名作为重定向网址,因此当我登录时,它将以域名格式重定向到该网址。

为什么域名和IP的php会话相同?

为了确保PHP会话与域名和IP不相同?我也尝试了我的管理系统,上面是用户系统。

我也尝试使用我的管理系统,可以使用ip一直登录。但是,当我将ip更改为URL中的域名时,会话也会丢失。

由于您提到了PHP,因此我将提供PHP手册中的信息。我相信其他语言也有类似的表现。

在服务器中,会话特定于Cookie。PHP手册

会话ID通常通过会话Cookie发送到浏览器,并且该ID用于检索现有会话数据。缺少ID或会话cookie可使PHP知道创建新会话并生成新会话ID。

在用户代理(客户端,通常是浏览器)中,cookie特定于域和路径。根据RFC6265第4.1.2.3节:

域属性指定将向其发送Cookie的那些主机。例如,如果“域”属性的值为“ example.com”,则当对example.com,www.example.com和www.corp.example进行HTTP请求时,用户代理将在Cookie标头中包含cookie。 com。

第4.1.2.4节:

仅当request-uri的路径部分与cookie的Path属性匹配(或是cookie的子目录)时,用户代理才会将cookie包含在HTTP请求中,其中%x2F(“ /”)字符被解释为目录分隔符。

所以,如果你从域名来回移动以IP地址,例如,example.com并且12.34.56.78,由服务器创建一个会话cookieexample.com不会被用户代理发送回来,如果你以后做出的请求12.34.56.78,即使双方都在同一台服务器。对于更高版本的请求,由于服务器看不到会话cookie,因此将创建一个新会话并发送一个新cookie。这就是为什么同时使用域名和IP地址将使用单独的会话的原因。

如果在同时使用域名和IP地址时需要使用相同的会话,则必须保留请求之间的会话ID。一种常见的方法是在查询字符串中传递会话ID。实际上,PHP会话管理也可以配置为使用此方法,但是我永远不需要使用它,因此我无法告诉您该如何进行。

继续我的示例,您可以将其用于后续请求:

http://12.34.56.78/?sessionId=abcdef0123456789

abcdef0123456789会话ID示例在哪里

在PHP代码中,在调用之前设置会话ID session_start()示例代码:

if(isset($_GET['sessionId']))
    session_id($_GET['sessionId']);
@session_start();

当然,您不必使用sessionId您可以使用foobar或其他任何方式。您也可以每天甚至每小时更改一次,以防止会话劫持。

更新:要使用foobar,请将PHP代码修改为此:

if(isset($_GET['foobar']))
    session_id($_GET['foobar']);
@session_start();

使用该代码,您可以像这样传递会话ID:

http://12.34.56.78/?foobar=abcdef0123456789

如果要使用xyz,则PHP代码为:

if(isset($_GET['xyz']))
    session_id($_GET['xyz']);
@session_start();

您可以像这样传递会话ID:

http://12.34.56.78/?xyz=abcdef0123456789

关键是,这取决于您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么scanf()不能将array和&array视为相同?

为什么不能绑定我的域名和vps_ip?

为什么尼斯级别被忽略?(在不同的登录会话之间-如果从相同的会话开始,则很荣幸。)

为什么我的会话值更改为特定值?

nhibernate RollbackTransaction和为什么回滚后处置会话?

为什么我的Rails会话和cookie无法持久保存?

什么是域名之间的差异保存和会话保存

为什么不将静态方法视为良好的OO实践?

为什么不将此类视为超类型作为参数?

为什么Visual Studio不将Obsolete(“ message”)视为警告?

为什么在C中不将函数视为一等公民

为什么类函数不将向量视为R中的向量?

为什么pygame的键码是特定于OS的?

为什么不能取消会话并取消会话?

HTTP会话和Web会话之间有什么区别?

无效会话和无效会话之间有什么区别

为什么DialogFlow`createContext` API需要会话?

为什么未创建我的PHP会话?

为什么没有gnome会话?

为什么不能劫持Yesod会话cookie?

会话没有真正刷新,为什么?

为什么OledbConnection打开后会话超时

为什么我的会话变量丢失了

为什么取消设置/销毁会话无效?

为什么会话消息无法正常工作?

为什么未设置我的会话变量?

为什么getSession()在短时间内间隔的后续请求中不返回相同的会话?

当我尝试计算IP点击数时,为什么会话无法正常工作?

为什么Python Tensorflow会话没有重置,为什么Java Tensorflow会话似乎重置了状态?