Session 使用基于URL的会话管理运行Drupal 7?
由于客户的要求,我面临着开发一个Drupal7站点,该站点不能使用cookies进行会话管理 帮助站点上的几个旧线程建议只需在站点的settings.PHP中设置相关的PHP配置:Session 使用基于URL的会话管理运行Drupal 7?,session,drupal-7,Session,Drupal 7,由于客户的要求,我面临着开发一个Drupal7站点,该站点不能使用cookies进行会话管理 帮助站点上的几个旧线程建议只需在站点的settings.PHP中设置相关的PHP配置: ini_set('session.use_cookies', '0'); ini_set('session.use_only_cookies', '0'); ini_set('session.use_trans_sid', '1'); 然而,尽管这在11年前可能奏效,但现在却行不通 快速查看core session
ini_set('session.use_cookies', '0');
ini_set('session.use_only_cookies', '0');
ini_set('session.use_trans_sid', '1');
然而,尽管这在11年前可能奏效,但现在却行不通
快速查看core session.inc文件可以发现原因:Drupal的整个会话处理都是在假定cookie可用的情况下编写的
但是,可以通过在session\u inc
变量中提供新处理程序的路径来覆盖使用的会话处理程序
因此,我可以通过编写一个新版本的session.inc并加载它来解决这个问题,而不是加载另一个版本,但如果不需要的话,我宁愿不要
我找不到最近有人提到过这个话题,但是如果有人能提供一些资源,或者一些关于如何重写session.inc的建议,我很高兴听到他们的建议。因此,实现这个目标需要三件事:
settings.php
文件中的条目:
$conf['session_inc'] = 'sites/all/modules/custom/my/session.inc';
ini_set('session.use_cookies', '0');
ini_set('session.use_only_cookies', '0');
ini_set('session.use_trans_sid', '1');
session.inc
。主要是使用$\u GET
代替$\u COOKIES
。(我最终剥离了HTTPS使用的所有额外安全性,以使另一方的生活更轻松。)hook\u drupal\u goto\u alter
:
function my_drupal_goto_alter(&$path, &$options, &$http_response_code) {
if (ini_get('session.use_trans_sid')) {
if (!isset($options['query'])) $options['query'] = array();
$options['query'][session_name()] = session_id();
}
}