Codeigniter 3 - 从外部 Codeigniter 安装访问会话
Posted
技术标签:
【中文标题】Codeigniter 3 - 从外部 Codeigniter 安装访问会话【英文标题】:Codeigniter 3 - Access Session from Outside Codeigniter Installation 【发布时间】:2015-09-09 11:41:03 【问题描述】:我似乎无法将从我的 codeigniter 应用程序传递回我的包含文件夹中的脚本的会话数据。从我读到的其他答案来看,我需要设置我的session_id()
以便能够重新加入与session_start()
的会话。
ROOT /
.. /application
.. /system
.. /includes
.. /Events.php <- I need access from here
理论上,至少根据其他答案,下面的代码应该可以工作,因为新的 CI 会话库会传递给本机会话。
session_id($_COOKIE['ci_session']);
session_start();
var_dump($_SESSION); // returns null
我误解了会话吗?
【问题讨论】:
access codeigniter session values from external files的可能重复 【参考方案1】:来自@wolfgang1983 Ben Swinburne 的原始答案与此处的答案相结合:来自Atiqur Rahman Sumon
您可以包含任何目录中的index.php
,但是,您需要更改$system_path
和$application_folder
变量以匹配您的相对位置。如果您想完全更改整个应用程序的路径,那就太好了,但我不想这样做,所以我只是将 index.php
文件复制到我需要包含 codeigniter 的目录中。
ROOT /
.. /application
.. /system
.. /includes
.. /Events.php <- I need access from here
.. /index.php <- Copied CI index with new paths
.. /index.php
在/includes/index.php
:
//$system_path = 'system';
$system_path = '../system';
//$application_folder = 'application';
$application_folder = '../application';
现在您可以在文件中包含 codeigniter 了:
<?php
ob_start();
include('index.php');
ob_end_clean();
$CI =& get_instance();
$CI->load->library('session'); //if it's not autoloaded in your CI setup
echo $CI->session->userdata('name');
?>
如果您现在刷新页面,您将最终加载默认控制器。
因此,从 Atiqur Rahman Sumon 的回答中,我们可以在加载之前定义一个常量来告诉默认控制器我们要跳过它的正常调用堆栈。
ob_start();
define("REQUEST", "external"); <--
include('index.php');
ob_end_clean();
在你的default_controller.php
:
function index()
if (REQUEST == "external")
return;
//other code for normal requests.
【讨论】:
为这个答案脱帽致敬。真正避免了为什么 AJAX 请求会加载我们应用程序的登录屏幕 html 的大量困惑! @PaulSkinner 很高兴我能帮上忙! 对于那些想要使用 CI 作为后端框架的人来说,这是最好的解决方案 :)。像我一样,我需要使用 wordpress 作为我的前端,我需要一个硬代码来添加一个新的登录仪表板,这将会发生。 最佳答案。 CodeIgniter 版本 3.1.9 仍然有效【参考方案2】:改进 @acupajoe 的答案,您不必复制粘贴 CI index.php
。而是将include
部分更改为:
<?php
ob_start();
define("REQUEST", "external");
$temp_system_path = 'path/to/system/folder/from/external/file';
$temp_application_folder = 'path/to/application/folder/from/external/file';
include('path/to/index.php/file/from/external/file');
ob_end_clean();
$CI =& get_instance();
//...
?>
然后换成index.php
:
$system_path = isset($temp_system_path) ? $temp_system_path : 'system';
和
$application_folder = isset($temp_application_folder) ? $temp_application_folder : 'application';
【讨论】:
为define("REQUEST", "external");
点赞。添加此行,如果您的index.php
始终重定向到其他页面,您的网站将不会重定向到其他页面。【参考方案3】:
我发现了这个access codeigniter session values from external files,它可能对你有所帮助。
<?php
ob_start();
include('index.php');
ob_end_clean();
$CI =& get_instance();
$CI->load->library('session'); //if it's not autoloaded in your CI setup
echo $CI->session->userdata('name');
?>
【讨论】:
以上是关于Codeigniter 3 - 从外部 Codeigniter 安装访问会话的主要内容,如果未能解决你的问题,请参考以下文章
codeigniter 4 设置会话变量 $session = \Config\Services::session();全球
要使用codeigniter框架还是标准的php? [关闭]