Apr 19

php中使用代码传递sessionid

一开始用的是php自动的传递sessionid,但是发现一个郁闷的问题:因为用的开发框架是cakePHP,而cakePHP的参数传递是这种形式的:

http://hulucat.com/action/param1:value1/param2:value2,即用“name:value”的形式在url中传参。然而,php的自动传递sessionid的方法应该是对“:”敏感(经过测试证实了这一点),当url中有冒号存在时,就不自动追加sessionid了。

因此,不得不放弃了php自动传递sessionid,改为依靠代码来传递:

  1. 规定站内所有url在书写时,必须经过一个公用方法,比如generateUrl($originalUrl),在方法内调用session_id()取得当前sessionid并向下传递。
  2. 修改php.ini,找到“url_rewriter.tags”这一节,把其中的“a=href”去掉,即站内手工控制的链接不必自动追加sessionid。
Apr 12

cakePHP使用memcached以url形式保持session

最近在做一个wap项目,因此不能使用cookie保持session。

在尝试用cackephp自带的session保存方法失败后,开始设置cakephp core.php中Configure::write(‘Session.save’, ‘php’),即使用php原生的session保持方法。

php自带的session保存方法是cookie传递、session在服务器端保持在files里。因此需要对php.ini做如下修改:

1.

session.save_handler = memcache
session.save_path = “tcp://127.0.0.1:11211″
extension=memcache.so

即服务器端使用memcache保存session。具体方法就不多说了,可以google一下memchached+php

2.

session.use_only_cookies = 0

session.use_cookies = 0

即不使用cookie传递session。

如此修改后重启apache即可。

多说一句,我做了上述修改后出现了一个奇怪的现象,即cakephp管理的链接都出现了这样的错误:<a href=’?sessionId=aaa&sessionId=aaa’,即sessionId被追加了两遍,并且后面一遍用到的&不是&amp;。经测试证明,这应该是cakephp的bug。

后来摸索,发现cakephp中core.php中关于database形式保存session的几项配置没有注释掉,注释掉就完全正常了,包括Configure::write(‘Session.start’, false)。