CodeIgniter问题:本机PHP会话,代码流,布局问题?

时间:2008-11-08 07:06:09

标签: php codeigniter

我刚开始使用CodeIgniter,我正在尝试散列我的常规模块/函数,以使它们在MVC框架内正常工作。对于具有强大CodeIgniter背景的人,我有一些具体问题:

会话

CodeIgniter会话将客户端的会话数据存储在cookie中,这对我来说不起作用。我知道它有一些替代品,或者我可以建立自己的库/助手;但我认为仅仅使用$_SESSION没有任何好处。

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

我觉得有点奇怪的是走出框架以外的东西这么基本,但我对普通的PHP非常熟悉。我基本上只是想将CodeIgniter用于MVC,并为我的项目强制实现更模块化的方面。

CODE FLOW& CONFIG

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

例如,假设我有一个常量APP_LIVE,根据当前服务器的名称设置为true / false。这必须在路径,错误报告,CodeIgniter系统和应用程序文件夹等基础上进行设置。

问题是system_folderapplication_folder(将基于运行代码的服务器设置)在index.php文件中首先设置已经加载了配置。

此外,我有一个函数可以检查URL中的内容,并可能在页面加载之前重定向。例如,某些页面需要在URL中存在www.(用于SEO),跟踪附属机构,访问者来源,营销标记等。

把这样的东西放在哪里的最佳位置必须尽早发生?我知道有一个配置文件,一个自动加载文件,一个常量文件等,但对于某些项目来说已经太迟了。简单地将这些东西放在主index.php文件的顶部,或者将其包含在全局配置文件中是不是一种坏习惯?再一次,我觉得自己正在走出框架,并想知道我是否只是这样做,因为我对它还没有充分的理解呢?

LAYOUT / HEADER FOOTER

与大多数人一样,我有一个顶部标题,导航,页脚等。我习惯于将它们放在文件中,这些文件都包含在我的页面模板中。我相信我可以通过创建视图并将它们包含在我的主页面视图中来以同样的方式执行此操作。这是最好的方式吗?其中一些需要一些数据;比如他们用于导航的页面等等。处理导航,共享页眉/页脚等的最佳方法是什么?

5 个答案:

答案 0 :(得分:3)

新发布的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 :(得分:1)

您可以在每个控制器中拥有多个load->视图行,但我个人认为它是耦合的。我强烈建议您查看CodeIgniter中的钩子,您可以在其中定义在每个控制器/方法之后自动运行的函数(AOP的一个很好的例子)。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

@lacho我在$ _SESSION上创建了自己的auth库。它在1.7上工作正常。

我认为$ _SESSION更加安全,因为CI'会话'是存储在客户端的cookie,被分类为不可信任的“用户传递信息”。

答案 4 :(得分:0)

您可以使用自己的会话类

尝试使用native

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