【问题标题】:Is there any way to get session data in folder outside Application folder of Codeigniter?有没有办法在 Codeigniter 的 Application 文件夹之外的文件夹中获取会话数据?
【发布时间】:2013-06-20 08:13:34
【问题描述】:

我在 CodeIgniter 的 /application 文件夹之外有一个文件夹,名为 myfolder

我的 CI 应用程序使用原生 PHP 会话,并且一切正常。 CI 版本是最新的 3.0 开发版。

我需要访问 myfolder/myfile.php 中的一些会话数据。如果我执行session_start() 然后print_r($_SESSION);,那么我看不到 CI 会话驱动程序设置的会话。我明白为什么它不显示它。

您知道我可以通过哪些方法/hack 来引用 myfolder 中 CI 会话中的会话数据。例如,直接包含 Codeigniter/libraries/session/drivers/session_native.php 或任何其他文件?我只是一个来自会话数据的数组。

【问题讨论】:

  • CI 会话库不使用本机会话,而是使用 cookie。您可以访问 cookie,但请注意,您也可以在 CI 中加密会话。
  • @Nish - 是的,确实如此。您是否检查过最新版本(开发中)?
  • 很抱歉不知道开发版的版本。但是在最后发布的版本中提到它不使用原生 PHP 会话。 ellislab.com/codeigniter/user-guide/libraries/sessions.html

标签: php codeigniter session


【解决方案1】:

这是一个技巧,但确实有效。在登录重定向之前放置这个顽皮的小代码。现在您也可以将ci_session 与 php 原生会话一起使用,玩得开心!

 <?php
 session_start();
 echo $_SESSION['ci_session'] = $this->session->userdata['ci_session'];
 ?>

【讨论】:

    【解决方案2】:

    当前的Session_native.php 似乎没有改变任何内置会话库的偏好或干扰会话数据的保存方式,我认为以下应该可行:

    • 获取要加载的会话的会话 ID
    • 调用session_id($sessid) 并使用此会话ID 之前 session_start()
    • 致电session_start()

    只要控制会话库的各种 ini 设置(如 session.save_path)相同并且可能(如果您的主机安装了此扩展程序)suhoshin settings(如 suhosin.session.cryptdocroot)不会干扰,这应该可以工作。

    【讨论】:

    • 我确实做了上述但似乎没有工作。让我再检查一遍。
    • 我的错。我错误地使用 session_name() 设置了 ID。现在可以了。谢谢。
    【解决方案3】:

    你可以进入cookies

    <?php 
    
    print_r($_COOKIE['ci_session']);
    

    【讨论】:

    • 它说“未定义的索引:ci_session in ......”。我的 CI 的 cookie 名称是 ci_session。
    • 检查您可能在 codeigniter 中重命名了 cookie 名称。检查此文件 application/config/config.php "sess_cookie_name"
    【解决方案4】:

    将您想要从文件夹外部引用的会话数据保存到 cookie 中,这可能会对您有所帮助。

    所以使用 cookie 来引用文件夹外部的数据,并确保在设置 cookie 时它应该位于正确的可访问路径中

    【讨论】:

      猜你喜欢
      • 2018-06-10
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 2012-01-17
      相关资源
      最近更新 更多