会话具体到底是什么?为什么不将ip和域名会话视为一样?

Kri*_*ofe 5 ip dns url session domain-name

我想知道会话具体是什么?这不仅限于一种语言.贝娄只是以php为例.

我使用php会话,当我使用我的网站域名时效果很好.要在Windows操作系统上的本地vmvare ubuntu中测试网站,我会更改Windows的主机以使DNS成为我的本地IP.在测试本地时,我使用域名,它也很好用.但是当我将浏览器中的URL更改为Ip时,会话将丢失.

你可能会混淆我为什么这样做,因为我想在我的Android设备上测试页面,因为我无法在没有android root的情况下更改我的android设备的hosts文件,所以我必须使用ip.

您可能也会混淆我为什么不一直使用ip?因为我在我的网络应用程序中使用第三次打开登录.第三个打开登录桅杆使用域名作为重定向回复网址,因此当我进入时,它将重定向到域名格式的网址.

为什么php会话在域名和ip时是一样的?

要确保php会话与域名和ip不一样?我也试过我的管理系统,上面是用户系统.

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

Rei*_*Rei 5

由于您提到PHP,我将包含来自PHP手册的信息.我相信其他语言表现相似.

在服务器中,会话特定于cookie.从PHP手册:

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

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

Domain属性指定将向其发送cookie的主机.例如,如果Domain属性的值为"example.com",则在向example.com,www.example.com和www.corp.example发出HTTP请求时,用户代理将在Cookie标头中包含cookie. COM.

第4.1.2.4节:

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

因此,例如,如果您从域名来回移动到IP地址,example.com并且12.34.56.78,example.com如果您稍后发出请求12.34.56.78,则用户代理将不会发回服务器创建的会话cookie ,即使两者都是同一台服务器 对于后一个请求,因为服务器没有看到会话cookie,所以会创建一个新会话并发送一个新cookie.这就是为什么同时使用域名和IP地址将使用单独的会话.

如果在使用域名和IP地址时需要使用相同的会话,则必须在请求之间保留会话ID.常见的方法是在查询字符串中传递会话ID.事实上,PHP会话管理也可以配置为使用这种方法,但我从不需要使用它,所以我不能告诉你这是怎么回事.

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

http://12.34.56.78/?sessionId=abcdef0123456789
Run Code Online (Sandbox Code Playgroud)

abcdef0123456789示例会话ID 在哪里.

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

if(isset($_GET['sessionId']))
    session_id($_GET['sessionId']);
@session_start();
Run Code Online (Sandbox Code Playgroud)

当然,你不必使用sessionId.你可以使用foobar或其他任何东西.您也可以每天甚至每小时更改它以防止会话劫持.

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

if(isset($_GET['foobar']))
    session_id($_GET['foobar']);
@session_start();
Run Code Online (Sandbox Code Playgroud)

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

http://12.34.56.78/?foobar=abcdef0123456789
Run Code Online (Sandbox Code Playgroud)

如果你想使用xyz,PHP代码将是:

if(isset($_GET['xyz']))
    session_id($_GET['xyz']);
@session_start();
Run Code Online (Sandbox Code Playgroud)

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

http://12.34.56.78/?xyz=abcdef0123456789
Run Code Online (Sandbox Code Playgroud)

关键是,这完全取决于你.