Session具体是做什么的?为什么不把ip和域名session看成一样呢?

2024-02-02

我想知道session具体有哪些?这不限于一种语言。下面仅以 php 为例。

我使用 php session,当我使用我的网站域名时它运行良好。为了在 Windows 操作系统上的本地 vmvare ubuntu 中测试该网站,我更改了 Windows 的主机,以使 DNS 指向我的本地 IP。本地测试时,我使用域名,效果也不错。但是当我将浏览器中的 url 更改为 Ip 时,会话就会丢失。

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

你可能还会疑惑为什么我不一路使用ip呢?因为我在我的网络应用程序中使用第三个开放登录。第三个打开的​​登录桅杆使用域名作为重定向url,所以当我登录时,它会重定向到域名格式的url。

为什么域名和ip时php的session是一样的?

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

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


既然您提到了 PHP,我将包含 PHP 手册中的信息。 我相信其他语言也有类似的行为。

在服务器中,会话是特定于cookie的。 从PHP手册 http://php.net/manual/en/session.examples.basic.php:

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

在用户代理(客户端,通常是浏览器)中,cookie 特定于域和路径。 从RFC6265 https://www.rfc-editor.org/rfc/rfc6265,第 4.1.2.3 节:

Domain 属性指定 cookie 将发送到的主机。例如,如果 Domain 属性的值为“example.com”,则用户代理在向 example.com 发出 HTTP 请求时将在 Cookie 标头中包含 cookie,www.example.com http://www.example.com, and www.corp.example.com http://www.corp.example.com.

第 4.1.2.4 节:

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

因此,例如,如果您在域名和 IP 地址之间来回移动,example.com and 12.34.56.78, 服务器创建的会话 cookieexample.com不会被用户代理发回 如果您稍后提出请求12.34.56.78,即使两者是同一服务器。 对于后面的请求,由于服务器看不到会话 cookie,因此会创建一个新会话并发送一个新 cookie。 这就是为什么同时使用域名和 IP 地址将使用单独的会话。

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

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

http://12.34.56.78/?sessionId=abcdef0123456789

Where abcdef0123456789是一个会话 ID 示例。

在PHP代码中,调用前设置会话IDsession_start()。 示例代码:

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

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

Update: To use 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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Session具体是做什么的?为什么不把ip和域名session看成一样呢? 的相关文章

随机推荐

  • 将 DataMemberAttribute 放在接口成员上意味着什么?

    放置一个是什么意思数据成员属性 http msdn microsoft com en us library system runtime serialization datamemberattribute aspx在接口成员上 这对派生类有
  • 绘制位图 C# [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试使用位图类在屏幕上绘制图像
  • 标准库算法是否允许复制谓词参数?

    假设我们想从向量中删除重复值ints 通常的解决方案是对向量进行排序并使用擦除删除惯用语删除重复项 但我们需要保持不会被移除的元素的顺序 所以我们无法排序 所以人们可能会想出这样的谓词并使用 with withremove if算法 str
  • 任意或自定义 URL 的 Rails 功能测试

    我的 Rails 应用程序中有一个名为 Photo 的 RESTful 资源 我在用着回形针 http www thoughtbot com projects paperclip为我的照片提供不同的 样式 缩略图等 并且我使用自定义路由来以
  • 是否可以通过 AJAX 加载 tumblr 帖子?

    我只是想知道是否可以通过 AJAX 加载 tumblr 帖子 我知道可以使用注释 但我想内联加载帖子的内容 我不是在谈论无限滚动 Thanks 对的 这是可能的 我编写了一些代码来读取帖子的标题并在我的网站上创建一个菜单 您可以访问帖子的全
  • 如何向我的 UIPageViewController 添加多个 ViewController?

    所以我对 Obj C 很陌生 并尝试查看示例代码和其他在线资源来回答我的问题 但我似乎找不到任何真正有帮助的东西 本质上 我想做的是将我在 Storyboard 中创建的多个 UIViewController 添加到 UIPageViewC
  • 分而治之和递归

    我想知道分而治之的技术是否总是将一个问题划分为同一类型的子问题 通过相同类型 我的意思是可以使用递归函数来实现它 分而治之总是可以通过递归来实现吗 Thanks 总是 是一个可怕的词 但我无法想到不能使用递归的分而治之的情况 根据定义 分而
  • 有条件包含在 linq to 实体中?

    我觉得以下应该是可能的 我只是不确定采取什么方法 我想做的是使用 include 方法来塑造我的结果 即定义沿对象图遍历多远 但是 我希望这种遍历是有条件的 something like dealerships include d gt d
  • 将 numpy 数组保存为 jpg 格式的 io.BytesIO

    我正在使用 xlsxwriter 在 python 代码中将图像插入到 Excel 中 现在 我在 opencv 处理之后有了图像数据 numpy 数组 我想将此图像数据插入到 Excel 中 但 xlswriter 仅支持 io Byte
  • 是否有使用线程池的 std::async 实现?

    标准功能std 异步 http en cppreference com w cpp thread async 模板函数 async 异步运行函数 f 可能在一个单独的线程中 该线程可能是线程池的一部分 并返回一个 std future 它最
  • 我们如何删除 Liferay 徽标、登录超链接和 Powered BY ?从屏幕上

    我使用 Liferay 6 和 Tomcat 进行开发 我为我的应用程序开发了一个自定义登录 POrtlet 现在进入http 本地主机 8086 http localhost 8086 显示我的自定义登录页面 请查看屏幕截图 我的问题是
  • Objective C + Reskit - 如何用键包装我的字典以避免格式问题?

    我正在尝试用密钥包装我的 HTTP POST 请求 换句话说 我想把这个变成 category id gt 1 food name token gt Pizza id gt 1 进入这个 dish gt category id gt 1 f
  • 继承公共接口的枚举中的代码重复

    我有几个符合通用接口的枚举 interface TableColumns String getColumnName int getColumnIndex ColumnType getColumnType boolean isEditable
  • 用C++计算字符串的MD5

    我有一个很好的内存映射文件示例 用于计算文件的 MD5 哈希值 效果很好 没有任何问题 我想改变它来计算字符串的 MD5 哈希值 所以例子是 包括 include
  • 任务计划程序 - 在未登录的情况下运行任务时访问非本地驱动器

    我在 win 调度程序中有一个每分钟运行的任务 该任务运行一个 bat 文件 SVN 会更新一系列文件夹 然后执行一个 perl 脚本 该脚本又会运行其他几个脚本 Perl 脚本的输出 日志 按日期 时间标记 被发送到共享驱动器 而不是任务
  • 弃用警告:危险的查询方法:ActiveRecord >= 5.2 中的随机记录

    到目前为止 common https stackoverflow com a 25577054 2995613从数据库获取随机记录的方法是 Postgress Model order RANDOM first MySQL Model ord
  • 将 ToolStripMenuItem 动态添加到 MenuStrip (C#/ Winforms)

    我已经实施了我的解决方案 基本解决方案 我很高兴 问题是 当我使用 Add 方法向 ToolStripItemCollection 添加新项目时 我得到了一些重载 有意义的重载是字符串参数 图像参数和 EventHandler 参数 因为我
  • 验证三个立方之和等于 33:在 R 中失败,在 Python 中有效

    最近 找到了以下方程的整数解 x 3 y 3 z 3 33 也就是说 它适用于x 8866128975287528 y 8778405442862239 z 2736111468807040 https en wikipedia org w
  • GnuPGME:GPG 签名 C++

    有没有人写过任何教程或有任何关于如何使用的文档GnuPGME http www gnupg org related software gpgme index en html所以我可以编写一个函数 例如gpgSign std string f
  • Session具体是做什么的?为什么不把ip和域名session看成一样呢?

    我想知道session具体有哪些 这不限于一种语言 下面仅以 php 为例 我使用 php session 当我使用我的网站域名时它运行良好 为了在 Windows 操作系统上的本地 vmvare ubuntu 中测试该网站 我更改了 Wi