跳转到主要内容
rli 提交于 12 June 2012

原文链接:http://drupal.org/node/32283

如何管理您的session在很大程度上是取决于您的应用是如何处理session的。但是在drupal的方面,对session的处理则十分直接,session.inc文件是被包含在bootstrap.inc文件中的。

如果您决定用您自己应用的session处理器,那么您可以简单的把bootstrap.inc中相关的代码注释掉。或者您可以用这两个session处理器各自处理不同的部分,比如您自己的应用来做身份验证。而drupal的处理器来做其余的drupal相关的方法。如果您打算同时用两个session处理器,那么您要确保它们用的变量名不会有冲突。drupal用的是$_SESSION变量。

如果您决定出去drupal的session处理器,那么您需要修改drupal的核心模块。核心模块有4个方法用到了drupal的session:

Authentication:您可以忽略这个部分,因为您将用您自己应用的session来验证用户的身份和角色,我们在身份验证部分已经解释过了。

Content filtering:drupal session被用来储存过滤条件,这样您在内容管理页面就能看到过滤过的内容列表了。这是通过node模块来达到的。如果您决定把这个信息储存到您自己应用的session里,一下就是您需要储存到session的部分:

<?php // Initialize/reset filters if (!isset($_SESSION['node_overview_filter']) || !is_array($_SESSION['node_overview_filter']) || $op == t('Reset')) { $_SESSION['node_overview_filter'] = array(); } $session = &$_SESSION['node_overview_filter']; $filter = $edit['filter']; if (($op == t('Filter') || $op == t('Refine')) && isset($filter)) { if (isset($filters[$filter]['options'][$edit[$filter]])) { $session[] = array($filter, $edit[$filter]); } } if ($op == t('Undo')) { array_pop($session); } ?>

Messages:这是drupal在用户完成了某些动作后向用户显示的信息,比如“The changes have been saved.“这些信息集中在一个中央区域统一被存入session,drupal通过bootstrap.inc中的drupal_set_message()和drupal_get_messages()方法达到此目的。您可以利用这两个方法来储存消息到您自己应用的session。

Comment preferences: 这是comment模块为正在浏览的客人储存评论信息的。您可以通过修改comment模块中的comment_save_settings()方法来储存此信息到您自己的session。