我曾经有我的网站托管在1and 1服务器上多年,它工作得很好(php 7. 4)。
因为,我决定切换到一个专用的服务器w/Linux ubuntu操作系统为我的web服务器(php 8. 1. 2)。
迁移后一切正常,但我遇到了一个奇怪的问题:当我从 AJAX /php查询中获得重定向时,我通常会将客户机转向(使用JS)所需的Web页面,然后会话丢失。
我有session_start();并确保它不会从www.mywebsite.com切换到mywebsite.com。
我很困惑,因为它是100%的代码,是在托管服务器上工作。
另一个线索是,我看到cookie的批准总是提示。因此,很明显存在一个会话问题,该问题导致客户端/服务器session_id不同步。
有什么配置可以确保在一个新的apache服务器上吗?我可以在我的“/var/lib/php/sessions”文件夹中看到一个新的会话,每次我触发重定向...
如有任何建议,我将不胜感激。
以下是我在php.ini中会话配置:
Session Support enabled
Registered save handlers files user
Registered serializer handlers php_serialize php php_binary
Directive Local Value Master Value
session.auto_start Off Off
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_samesite no value no value
session.cookie_secure 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 0 0
session.lazy_write On On
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /var/lib/php/sessions /var/lib/php/sessions
session.serialize_handler php php
session.sid_bits_per_character 5 5
session.sid_length 26 26
session.upload_progress.cleanup On On
session.upload_progress.enabled On On
session.upload_progress.freq 1% 1%
session.upload_progress.min_freq 1 1
session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix upload_progress_ upload_progress_
session.use_cookies 1 1
session.use_only_cookies 1 1
session.use_strict_mode 0 0
session.use_trans_sid 0 0
4条答案
按热度按时间vwoqyblh1#
session_start();
应该在任何html输出(包括白色)之前声明在脚本的顶部。1.是否也使用session_name()?https://www.php.net/manual/en/function.session-name.php
1.检查cookie名称
PHPSESSID
,看看它是否在更改。1.你可以试着把会话存储在Redis中,比如说,也许是一个cron正在删除你的
/var/lib/php/sessions
的内容?2w2cym1i2#
有时,默认会话路径可能不可写,或者您正在使用的新服务器可能使用了自定义会话处理程序。
在这种情况下,我通常尝试覆盖会话存储路径,并查看会话是否在请求之间停留。
下面的代码应该放在请求生命周期的最早点。(在执行任何其他代码之前)
请参阅PHP文档https://www.php.net/manual/en/function.session-save-path.php
另一个可能的问题是会话cookie没有与 AJAX 请求一起发送。
如果是这种情况,您可能希望看到以下答案:Why is jQuery's .ajax() method not sending my session cookie?
bqjvbblv3#
好了,
我已经找到了什么是错的,我觉得很愚蠢,但需要分享的原因,以防它发生在任何人身上。
以前,在使用1和1虚拟主机服务器时,我使用的结构如下:请mysiteweb.comsubDomainWebApp.mysiteweb.com
如果我没有登录webapp,我会被重定向到带有iframe的网站,打开webapp登录页面。
登录后,我打开www.example.com中的索引subdomainofwebapp.mysiteweb.com
因此Cookie在网站和子域之间共享。
但现在我将www.example.com移subDomainWebApp.mysiteweb.com到了一个专用服务器上,该服务器有自己的域名WebApp.com
因此初始网站中的iframe调用不会与新的www.example.com域共享cookieWebApp.com。
我不得不重新构建日志记录,以便直接在新域上管理它。
很抱歉,但是在我仔细查看cookie会话数据后,您的所有提示都引导我得出了这个结论。
谢谢你们
js4nwp544#
据我所知,会话数据已丢失。如果我理解正确,您可以尝试更新服务器的写入权限。
看起来像;
sudo chmod 1777 -R /home/您的用户路径/tmp/