每次请求时PHP会话ID都会更改
我刚刚将我的应用程序从本地WAMP迁移到实际的在线服务器。这导致会话ID无法按显示的方式保存每次请求时PHP会话ID都会更改,php,session,Php,Session,我刚刚将我的应用程序从本地WAMP迁移到实际的在线服务器。这导致会话ID无法按显示的方式保存 在会话开始之前,我已检查是否输出了不需要的字符 我似乎找不到任何保存在my/tmp中的会话文件 以下是我的会话设置: session.auto_start Off Off session.bug_compat_42 Off Off session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limit
- 在会话开始之前,我已检查是否输出了不需要的字符
- 我似乎找不到任何保存在my/tmp中的会话文件
session.auto_start Off Off
session.bug_compat_42 Off Off
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies On On
session.use_trans_sid 0 0
- 在线服务器运行的是:PHP版本5.3.9,而WAMP运行的是:PHP版本5.3.5
- 通过查看发送的标题和我得到的每个页面加载中的响应,set cookie发送适当的会话id,接收到的响应发送一个新的会话id,就好像没有请求任何内容一样
- 我在预览URL(SSL上)上运行该站点。我不知道这是否有什么关系,我的域名还没有注册
- 错误代码如下所示:
$sId=session_id()代码>
if($sId=''){session_start();}
会话\u启动
应该是文件中的第一件事,之后您可以获取会话id:
session_start();
$sId = session_id();
您应该首先启动会话以使用会话函数。因此,您需要做的第一件事是:
session_start();
然后你可以像这样要求会话id
$id = session_id();
请注意,不建议将会话保存在公用文件夹中,因为访问者可以找到保存会话的文件夹并列出所有会话。然后,他们可以将会话cookie注入浏览器,并控制其他访问者的用户帐户。如果确实需要这样做,请限制对/tmp文件夹的访问。例如,使用以下代码将.htaccess文件放在该文件夹中
Deny from all
或者找到任何其他方法来禁止用户浏览/tmp文件夹,因为这可能是安全问题
如果您想更改每个请求的会话id,出于安全原因,您可以使用
您可以这样做:
session_start();
session_regenerate_id();
// Do other things you want with sessions.
这样,即使有人偷了您的会话cookie,会话id也会在每次请求时更改。这可能是你的问题。PHP有一种方法可以在每个请求上重新生成新的会话id,因此这可能是困扰您的问题
至于设置php.ini指令,您应该检查托管提供商是否允许您更改您试图更改的.ini指令。是否可以更改.ini指令取决于服务器设置。会话的行为方式可能因主机而异,这取决于它们的服务器设置。使用php函数或使用此指令列表可以更改大部分内容您必须编写session_start();在访问任何会话变量之前,如果没有它,您将无法访问会话变量
尝试将会话_start()放在文件的第一行。问题很老,初始问题肯定已解决。然而,之前的答案最终对这种情况没有帮助。因此,如果有人遇到与我类似的问题,这里有另一种方法: 会话使用cookie进行管理,通常称为
PHPSESSID
。如果该cookie未正确声明,因此无法包含在用户的后续请求中,则会在每个请求上启动另一个会话,从而导致至少类似于您的情况
我试图实现一个运行在反向代理之后的应用程序,将公共URL映射到多个应用程序,例如
http://public.example.com/foo/bar/script.php
已委托给反向代理后面的某个服务器,如
http://foo.example.com/bar/script.php
对于在路径前缀为
/bar
而不是/foo/bar
的foo.example.com
上下文中运行的PHP,设置会话cookie的参数PHPSESSID
在传递给客户时可能会导致问题。这一观察至少在我的情况下是正确的。这可能是由于在只使用字母数字字符作为会话ID之前,某些程序(即dreamweaver、记事本)注入了三个字符(BOM())造成的。我在使用“.”作为会话ID的一部分。我刚刚解决了完全相同的问题
事实证明,cookie PHPSESSID(保存会话记录)已发送,但服务器忽略了它,因此会话未被维护,服务器在每次重新加载或更改页面时都重新启动会话
问题是我的wp-config.php中有以下行:
@ini_set('session.cookie_secure','On');
这意味着,如果连接不安全,则将忽略每个cookie,因此服务器将删除PHPSESSID cookie并重新启动会话
检查您的wp config.php或init.php。cookies有问题。谢谢您的回复。我从session_start()开始;现在,我不会检查会话_id(),直到执行的后面(只是为了找出它是哪一个)。每次请求时,我的会话Id仍在刷新,而无需调用重新生成Id或任何类似的操作。简单的会话开始->存储一些变量->执行结束(应该写关闭)->下一页请求->Id和会话变量都不存在。看起来这是主机的预览页问题。谢谢大家的回答!很抱歉,我可能没有明确表示我希望在每个请求中保留相同的会话Id,并且它会在我不调用REGENATE的情况下重置。谢谢。那么我假设会话id会在每次请求时重新生成。那是什么样的申请?您是从scratch编写的,还是某种mvc框架?您应该检查代码并检查会话是否重新生成,或者询问主机提供商他们是否重新生成会话。我将发布一个问题,以防供应商。如果有任何其他想法,请不要犹豫,再次与我联系。脚本是从头开始编写的,在输出任何内容之前,我使用输出缓冲区和会话启动。所以这是无法解释的。E