【问题标题】:Sessions and Statefulness会话和状态
【发布时间】:2011-07-14 20:47:02
【问题描述】:

如果 PHP 是无状态的,那么即使您将变量声明为静态,它们也不会在不同的运行中保留它们的值。那么尝试使用下面的类来监控会话是否毫无意义,因为会话会在运行期间保持状态,但 PHP 用户代码不会。

class session
  {
  protected static $ses_id ="";
  public static function start()
    {
    self::$ses_id = session_start();
    }
  public static function is_start()
    {
    return self::$ses_id;
    }
  public static function finish()
    {
    self::$ses_id = 0;
    $_SESSION=array();
    if (session_id() != "" || isset($_COOKIE[session_name()]))
      {
      setcookie(session_name(), '', time()-2592000, '/');
      }
    session_destroy();
    }
  }

【问题讨论】:

  • 问题是……?
  • 您是通过命令行 (php-cli) 运行它还是通过 Web 浏览器连接?

标签: php session


【解决方案1】:

您编写的类不会添加任何新功能,它只是包装现有功能(由session_* 函数提供)。如果您需要调解或控制对会话的访问,这种事情可能是值得的。只有你自己才能判断它是否值得在你自己的应用中使用。

【讨论】:

    【解决方案2】:

    来自documentation

    session_start() 创建会话或恢复当前会话 通过 GET 或 POST 请求传递的会话标识符,或通过 饼干

    这意味着您可以恢复会话,并且$ses_id 将保持不变,而会话有效且未被销毁。

    将它包装在一个类中是一种封装会话功能并以 OOP 方式访问它的好方法。您还可以扩展该类以提供一种简单的方法来保存相关会话数据,然后以比使用提供的 session_* 函数更明智的方式在整个应用程序中访问这些数据。

    【讨论】:

    • True..但我无法验证会话 ID 是否在运行过程中发生了变化,因为我的代码没有保留状态。
    • @stack.user.0 - 使用数据库
    • 我最近了解到的是 session_start,当使用 cookie 跟踪会话时,是依赖于子域的,b.c。 cookie 仅对其域或子域有效....我很难学到这一点...但是为 www.hostname.com 设置的会话与为 hostname.com 设置的会话不同(没有 wwww.in前)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2019-10-28
    • 2012-04-08
    相关资源
    最近更新 更多