【问题标题】:session and cookie to handle datasession 和 cookie 来处理数据
【发布时间】:2011-05-03 10:07:36
【问题描述】:

我正在制作一个需要保存从属关系数据的应用程序

我的一个朋友建议我可以使用会话和 cookie 来做到这一点,但我没有关于如何实现它的适当指导。

这是我所知道的。

每个产品都有附属代码 当访问者点击附属代码时,我会在服务器端创建一个会话 我会使用 cookie 在客户端保存会话 ID,以便记录隶属关系以供将来访问。

有两个问题

  1. 如何在 cookie 中保存会话 ID?如何获取会话 ID?
  2. 我认为一旦用户/访问者关闭浏览器,会话就会被破坏,对吗?我怎样才能将会话保存更长的时间,比如直到我设置我的 cookie 过期时间?

【问题讨论】:

  • 恐怕这个建议是错误的,会话不是长时间存储数据的工具。
  • 正确,它们不适合长期存储。但是,它们可用于将访问者链接到 OP 正在尝试执行的数据库记录。这是简单的访客跟踪...
  • 我的意思是“长期”而不是“长期”。他的描述听起来像是他想将数据保留几天或几周,没有会话的用例。

标签: php session-cookies


【解决方案1】:

将您的 cookie 过期时间设置为远在未来的某个时间,然后在用户访问您的网站时跟踪客户端。如果他们清除 cookie,这种方法将失效。

另一个选项是匹配用户代理字符串和 IP 地址。这不是 100% 准确,但会让您接近。

恕我直言,最好的选择是要求用户注册。这样,您可以确认他们的身份并在他们登录时继续跟踪他们。

【讨论】:

    【解决方案2】:

    在PHP中,可以通过调用获取当前会话ID

    $_currentSessionId = session_id()
    

    要将其写入 cookie,只需执行以下操作:

    $_expires = 0;
    setcookie( 'YOUR_SID', $_currentSessionId, $_expires );
    

    返回后,从 cookie 中提取 SID:

    if ( isset( $_SESSION['YOUR_SID'] ) ) {
        $_currentSessionId = $_SESSION['YOUR_SID'];
        // Do your thing...
    }
    

    如果你将$_expires 的0 传递给setcookie,它将是一个基于会话的cookie,或者在用户关闭浏览器时被销毁。如果您将 $_expires 设置为较大的值,它将在稍后过期(应该是从现在开始的秒数)。

    我见过人们使用:

    $_expires = pow(2,31)-1;
    

    用于非常持久的 cookie。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      相关资源
      最近更新 更多