zencart去掉URL地址带?zenid=的参数彻底解决 zencart模板

勉强看懂写的是什么东西。

zen cart 去掉URL地址带?zenid=的参数 彻底解决

1、在后台Configuration->session 将Force CookieUse 设置为ture;一般如果网站只是在刚开启的时候存在zenid的话,那么,只要这样设置一下就可以了;注意:本设置将会强制要求使用cookie,部分客户会因此无法购物,则出现cookieusage页面,请慎用!另一种就是从头到尾,URL地址后面一直都会有一串zenid= 参数后缀,这个情况可能是因为缓存文件夹没有写分配权限或者不存在,可以试试方案2.

2、引用英文论坛上的一个正确回复:

In case some of you are wondering why zen_id is all of a suddenbeing added to your links (or always has) and you want it gone: Besure that your “Session Directory” inConfiguration>Sessions is set to a directory thatactually exists and is writable. If the directory doesn’t exist,then zen cart will starting adding zenid to URLS. Hope this helps.这句话的意思就是说在zen-cart后台的Configuration>Sessions里有一项SessionDirectory,它是指定session所使用的文件夹的,如果这个文件夹不存在,或者不可写的话。那么就会在URL上显示zenid=,当然,解决方法就是让这个项所指向的文件夹存在并且可写。后台设置Session Directory:设置成你网站存放的正确路径
Cookie Domain: True
zencart去掉URL地址带?zenid=的参数彻底解决 zencart模板
Force Cookie Use: True

遇到URL后面带有一串&zenid=…..的地址而地址是无效的情况下,彻底解决的办法是在html_output.php里面修改代码,具体操作如下:找到if (isset($sid)) { $link .= $separator . zen_output_string($sid);}这段代码,把它屏蔽掉就可以了。 如果在后台设置force cookies为true的话,可能会造成顾客会无法完成付款流程。

仁者见仁,智者见智,用什么方法比较好,自己去体会啦。

以上2种方案的确可以解决zenid参数问题,不过我现在想讨论多一些。首先说”Force CookieUse”,先看一段原代码:

01

04 $session_started = false;

05 if (SESSION_FORCE_COOKIE_USE == 'True'){

06zen_setcookie('cookie_test', 'please_accept_for_session',time()+60*60*24*30, '/', (zen_not_null($current_domain) ?$current_domain : ''));

07

08 if(isset($_COOKIE['cookie_test'])) {

09zen_session_start();

10$session_started = true;

11 }

12 } elseif (SESSION_BLOCK_SPIDERS == 'True'){

13 $user_agent =strtolower($_SERVER['HTTP_USER_AGENT']);

14 $spider_flag =false;

15 if(zen_not_null($user_agent)) {

16$spiders = file(DIR_WS_INCLUDES .'spiders.txt');

17for ($i=0, $n=sizeof($spiders); $i<$n; $i++){

18if (zen_not_null($spiders[$i])) {

19if (is_integer(strpos($user_agent, trim($spiders[$i])))){

20$spider_flag = true;

21break;

22}

23}

24}

25 }

26 if ($spider_flag ==false) {

27zen_session_start();

28$session_started = true;

29 }

30 } else {

31zen_session_start();

32 $session_started =true;

33 }

很明显可以看到,如果SESSION_FORCE_COOKIE_USE =='True',SESSION_BLOCK_SPIDERS =='True'以下的代码段就不会有效,可是以下这段代码很关键,它可以阻止机器人开启会话,如果SESSION_FORCE_COOKIE_USE== 'True',意思就是说不管是什么UA,全部开启会话....这真是一个很糟糕的建议,或者本身的程序设计也有点问题。所以我不建议使用这个方法。

接下来我们看看zenid这个参数是怎么被添加进去的,没有疑问,一定是在构建链接的时候添加,打开html_output.php文件定位到zen_href_link函数,我们发现这个函数有一个参数并带默认值$add_session_id= true,然后看一下这个函数源代码:

01 if ( ($add_session_id == true)&& ($session_started == true)&& (SESSION_FORCE_COOKIE_USE =='False') ) {

02 if (defined('SID')&& zen_not_null(SID)){

03$sid = SID;

04 } elseif ( (($request_type == 'NONSSL') &&($connection == 'SSL') &&(ENABLE_SSL == 'true') ) || ( ($request_type == 'SSL')&& ($connection == 'NONSSL') ) ){

05if ($http_domain != $https_domain) {

06$sid = zen_session_name() . '=' .zen_session_id();

07}

08 }

09 }

10 //中间的省....

11 if (isset($sid)) {

12 $link .= $separator .zen_output_string($sid);

13 }

14 //以下部分省....

很容易看到,这个zenid就是这样被添加进去的,如果SESSION_FORCE_COOKIE_USE =='True',那么不符合条件,这个zenid自然就不会添加,所以这个就是第一种方法可以实现不添加zenid的代码实现。我们看到 if( ($add_session_id == true) &&($session_started == true) &&(SESSION_FORCE_COOKIE_USE == 'False') ) 这个条件中还有一个$add_session_id ==true,如果把它设置成false,那么自然也可以实现不添加这个zenid的了。这样做好处是没有第一种方法那样产生副作用,不太好的地方时要修改zen_href_link函数参数的默认值(就是改为$add_session_id== false)。

如果$add_session_id ==false,不管怎么样,一定不会有zenid这个尾巴,然而如果终端浏览器禁用Cookie,带这个尾巴是保持会话的前提,但是浏览器禁用Cookie似乎是未雨绸缪的,所以我大胆假设所有用户都没有禁用Cookie...

至于第二种方式说如果保存会话文件的文件夹不可写就会添加zenid我暂时找不到这是哪门子逻辑,如果它不可写,那么会话数据无法保存,那么把这个尾巴带上也于事无补,殊不知,带上这个尾巴的本质意义就在于当Cookie没有启用,那么就根据这个尾巴来跟踪保持会话,至于保存会话的文件夹是否可写根本就是两回事

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/208584.html

更多阅读

手工画?怎样用彩色铅笔画一幅带翅膀的心 儿童彩色铅笔画

心形代表爱情,今天小DU教你怎么样用手头的彩色铅笔画一幅飞翔的心。你可以画在贺卡上,特别是情人节贺卡上,即便画的不是很专业,但是你仍然会赢得爱人的喜欢的。看看效果图。手工画?怎样用彩色铅笔画一幅带翅膀的心——工具/原料彩色铅

怎样制作QQ带文字的头像 qq头像文字图片制作

怎样制作QQ带文字的头像——简介喜欢文字头像的朋友注意了,你还在为喜欢的头像没有自己喜欢的文字苦恼么,现在教大家制作自己喜欢的qq文字头像,喜欢的可以学习一下.怎样制作QQ带文字的头像——工具/原料需要一张制作头像的图片美图秀

如何清除地址栏里的网址记录 怎样清除地址栏的网址

如何清除地址栏里的网址记录——简介如何清除地址栏里的网址记录如何清除地址栏里的网址记录——方法/步骤如何清除地址栏里的网址记录 1、方法一:启动IE,在“工具”菜单里选取“Internet选项”。点击“常规”选项卡里的“清除历史记

声明:《zencart去掉URL地址带?zenid=的参数彻底解决 zencart模板》为网友妖怪分享!如侵犯到您的合法权益请联系我们删除