CodeIgniter 问题:原生 PHP 会话、代码流、布局问题?

CodeIgniter questions: native PHP sessions, code flow, layout issues?

提问人:Eli 提问时间:11/8/2008 最后编辑:tereškoEli 更新时间:2/9/2013 访问量:6308

问:

我刚刚开始使用 CodeIgniter,我正在尝试散列我的常规模块/函数,以使它们在 MVC 框架中正常工作。我有几个具体的问题要问那些有很强的 CodeIgniter 背景的人:

会话

CodeIgniter 会话将客户端的会话数据存储在一个 cookie 中,这对我来说是行不通的。我知道它有一些替代品,或者我可以建立自己的库/助手;但我只是看不出仅仅使用.$_SESSION

如果我只是使用 ,框架的其余部分会有任何问题吗?框架的任何其他部分是否依赖于使用 CodeIgniter 会话?$_SESSION

对于如此基本的东西,我走出框架感到有点奇怪,但我对普通的PHP很满意。我基本上只是想将 CodeIgniter 用于 MVC,并为我的项目强制执行一个更加模块化的方面。

代码流和配置

我有一些配置项需要在几乎其他任何事情之前完成。

例如,假设我有一个常量,该常量根据当前服务器的名称设置为 true/false。这必须很早就发生,因为路径、错误报告、CodeIgniter 系统和应用程序文件夹等将基于它进行设置。APP_LIVE

问题在于,在加载任何配置之前,首先在文件中设置了 和 和(将根据代码运行的服务器进行设置)。system_folderapplication_folderindex.php

此外,我还有一个功能可以检查 URL 中的内容,并且可以在页面加载之前重定向。例如,某些页面需要预料到URL中的存在(用于SEO),跟踪会员,访问者来源,营销标志等。www.

把这种必须很早就发生的事情放在哪里最好?我知道有一个配置文件、一个自动加载文件、一个常量文件等,但这些对于某些项目来说为时已晚。简单地将这些东西放在主文件的顶部,或者将它包含在全局配置文件中,这是一种不好的做法吗?再一次,我觉得我正在走出框架,想知道我这样做是不是因为我还没有对它有一个坚实的理解?index.php

布局/页眉页脚

像大多数人一样,我有顶部页眉、导航、页脚等。我习惯于将它们放在文件中,这些文件包含在我的页面模板中。我相信我可以通过使它们成为视图并将它们包含在我的主页视图中来做到这一点。这是最好的方法吗?他们中的一些人需要一些数据;比如他们在哪个页面上进行导航,等等。处理导航、共享页眉/页脚等的最佳方法是什么?

php codeigniter

评论

0赞 meleyal 11/8/2008
请参阅此帖子,了解如何构建布局/视图

答:

3赞 John McCollum 11/8/2008 #1

新发布的 CI 1.7 处理数据库中的会话(如果使用的是会话)。

但是,CI 被设计为松散耦合,因此如果您决定改用 $_SESSION,则不会注意到任何重大问题。

对于页眉/页脚/导航,您可以创建(例如)headerview.php、footerview.php 和 contentview.php,并通过在控制器中执行类似操作将数据传递到您的视图:

$data['title'] = 'about us';
$data['content'] = 'hello world!';

$this->load->view('headerview', $data);
$this->load->view('contentview', $data);
$this->load->view('footerview');

基本上,您可以像对待包含一样对待这些视图,但还有一个额外的好处,即您可以更改其中的变量。我会避免从视图内部调用其他视图,但这可能只是我。

我自己对 index.php 进行了一两次添加,以设置初始值等,并且从未遇到过问题。

恭喜您选择了框架;我相信你不会失望的。;)

1赞 Mehmet Duran 11/8/2008 #2

您可以在每个控制器中设置多个加载>视图行,但我个人认为它是耦合的。我强烈建议你看一下 CodeIgniter 中的钩子,在那里你可以定义在每个控制器/方法之后自动运行的函数(AOP 的一个很好的例子)。

1赞 lacho 11/12/2008 #3

实际上,$_SESSION 数组似乎未设置,因此您不能使用本机 PHP 会话(至少在 1.7 上)。然而,在 CodeIgniter wiki 中,有一个会话类使用原生的 php 会话 - 你可以像另一个一样使用它,但它只在 cookie 中存储session_id。这里是:http://codeigniter.com/wiki/Native_session/

评论

0赞 Eli 11/12/2008
嗨 - 谢谢你。是否确定?_SESSION美元似乎在开发服务器上工作正常,但我不希望有一天看到它突然消失。我们正在使用 1.7.0。
0赞 11/12/2008
嗨,实际上我刚刚开始使用 CI,我对任何事情都不太确定:P可能是我缺少一些配置设置......但我也在使用链接中的实现,到目前为止我很高兴 - 还支持 flashdata 功能。我认为值得检查。祝你好运!
0赞 Eli 11/18/2008
谢谢!(这里还有一些字符,因为需要 10 个字符)
0赞 Teej 11/17/2008 #4

@lacho我在 _SESSION 美元上创建了自己的身份验证库。它在 1.7 上运行良好。

我相信 _SESSION 美元更安全,因为 CI“会话”是存储在客户端的 cookie,被归类为不可信的“用户传递信息”。

评论

0赞 Mark 5/21/2012
Cookie 中的数据是加密的,因此理论上是安全的(您可能会丢失它,但如果密钥没有泄漏,则无法更改)
0赞 A Bright Worker 11/14/2012 #5

您可以尝试使用自己的会话类进行本机操作

http://www.moreofless.co.uk/using-native-php-sessions-with-codeigniter/