转自:https://www.bocchi.tokyo/2019/06/24/can-not-change-session-name/
背景
最近把准备把项目直接从PHP5.6 升级到7.3。 升级过程中遇到个比较棘手的问题,那就是出现了大量Cannot change session name when session is active的Warnning。
剖析
我们通常使用session_name($name)来改变session的名称(默认PHPSESSIONID)。而这个warning出现在我们在session_start()之后调用session_name。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php |
PHPSESSIONID,另一个则是我们变更之后的hoge。echo输出的内容为hoge。
1 2 |
d78ca52754275ef448ea8bff2ef4c051 hoge |
PHPSESSIONID
1 2 3 |
Warning: session_name(): Cannot change session name when session is active in /Users/ning.a.li/workplace/operations/tmp/test.php on line 4 PHPSESSID tqa2u87v89ul1a7k7srrn8fhf5 |
原来,现有的code在我们开始load framework之前有对session和cookie进行操作,而进入framework之后,由于framework并不知道我们已经建立了session,framework尝试根据config建立session的时候就会产生Warning。
那么如何解决这个warnning呢?
首先我们得考虑是否真正有必要变更session_name。
通常,当我们有两个web app运行在同一个domain下面的时候,我们可以通过设置不同的session_name来区分两个不同app的用户。
但是这种情况往往会造成不必要的麻烦。
就目前项目的code来说,修正的方法很简单,我们在framework中对session_name相关的调用添加@即可。即类似@session_name(my_session)。
评论 (0)