【问题标题】:After payment success session destroying automatically支付成功后会话自动销毁
【发布时间】:2015-11-26 05:54:12
【问题描述】:

我正在做一个小项目,因为我在会话中有用户数据。中间用户进行支付,支付成功后会话自动销毁。

现在无法从会话中获取用户数据。 (我怎样才能在不使用 COOKIES 的情况下实现这一点)。

注意:我尝试过使用:

header('Access-Control-Allow-Origin: *');    

但没用。

【问题讨论】:

  • 你所有的php页面的开头都有session_start();吗?
  • 使用 session_destroy();
  • 是的,我有 session_start();在文件的开头...@Luthando Loot
  • 如果我们能够有效地回答您的问题,您应该接受答案。

标签: php


【解决方案1】:

您好,这是 PHP 手册中的一个示例,希望对您有所帮助。首先通过 session_start(); 开始你的会话;一旦你所有的交易都完成了销毁是由 session_destroy();

 <?php
    // Initialize the session.
    // If you are using session_name("something"), don't forget it now!
    session_start();

    // Unset all of the session variables.
    $_SESSION = array();

    // If it's desired to kill the session, also delete the session cookie.
    // Note: This will destroy the session, and not just the session data!
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params["path"], $params["domain"],
            $params["secure"], $params["httponly"]
        );
    }

    // Finally, destroy the session.
    session_destroy();
    ?>

【讨论】:

    【解决方案2】:

    $_SESSION 是一个特殊的数组,用于存储用户在访问您的网站或 Web 应用程序期间提出的跨页面请求的信息。 虽然可能有许多用户同时访问该站点,每个用户都有自己的会话,这要归功于 PHP 为每个会话分配和管理的唯一 ID,这使得每个用户的会话只能对他自己可用。会话信息存储在服务器上而不是用户的计算机上(作为存储 cookie 数据),这使得会话在页面请求之间传递信息比传统 cookie 更安全。

    使用会话

    在您可以在会话中存储信息之前,您必须启动 PHP 的会话处理。这是在 PHP 代码的开头完成的,并且必须在任何文本、HTML 或 JavaScript 发送到浏览器之前完成。要开始会话,请在第一个文件中调用 session_start() 函数:

    <?php
     // start the session
     session_start();
     // store session data
     $_SESSION["username"] = "Qateel";
    

    session_start() 启动用户和服务器之间的会话,并允许稍后在其他脚本中访问存储在 $_SESSION 中的值。

    在您的第二个文件中,您再次调用session_start(),这一次会继续会话,然后您可以从$_SESSION 检索值。

    <?php
     // continue the session
     session_start();
    // retrieve session data
    echo "Username = " . $_SESSION["username"];
    

    结束会话

    开始一个会话很重要,结束一个会话也很重要。尽管会话只是存储数据的一种临时方式,但在处理潜在敏感信息时,自行清理以确保最大安全性非常重要。这也是一种很好的做法,可以避免在服务器上放置大量陈旧的会话数据。

    要删除单个会话值,请使用unset() 函数:

    <?php
      session_start();
      // delete the username value
      unset($_SESSION["username"]);
    

    要取消设置会话的所有值,您可以使用 session_unset() 函数:

    <?php
     session_start();
     // delete all session values
     session_unset();
    

    这两个示例只影响存储在会话中的数据,而不影响会话本身。如果您愿意,您仍然可以在调用它们之后将其他值存储到$_SESSION。如果您希望完全停止使用会话,例如用户注销,您可以使用session_destroy() 函数。

    <?php
     session_start();
     // terminate the session
     session_destroy();
    

    小贴士

    尽管很简单,但使用会话的方法仍有可能出错。

    如果您正在处理登录到您的网站或应用程序的用户,那么超时会话是一项非常重要的操作。

    if (isset($_SESSION["timeout"])) {
       // calculate the session's "time to live"
       $sessionTTL = time() - $_SESSION["timeout"];
       if ($sessionTTL > $inactive) {
          session_destroy();
          header("Location: /logout.php");
       }
    }
    

    在您知道数据将被持久化的最早时刻使用数据库存储数据;不要让它作为会话的一部分停留太久,因为这会导致可能的攻击。

    当您不再需要使用会话时,请使用 session_destory()

    你可能想通过:

    【讨论】:

      猜你喜欢
      • 2020-07-31
      • 2012-02-15
      • 2015-03-20
      • 2021-06-21
      • 2011-12-12
      • 2016-01-03
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      相关资源
      最近更新 更多