apache 重定向后会话丢失,(从托管服务器运行正常)

zu0ti5jz  于 2022-11-16  发布在  Apache
关注(0)|答案(4)|浏览(216)

我曾经有我的网站托管在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
vwoqyblh

vwoqyblh1#

  1. session_start();应该在任何html输出(包括白色)之前声明在脚本的顶部。
<?php
  session_start();
  // code

1.是否也使用session_name()?https://www.php.net/manual/en/function.session-name.php
1.检查cookie名称PHPSESSID,看看它是否在更改。
1.你可以试着把会话存储在Redis中,比如说,也许是一个cron正在删除你的/var/lib/php/sessions的内容?

2w2cym1i

2w2cym1i2#

有时,默认会话路径可能不可写,或者您正在使用的新服务器可能使用了自定义会话处理程序。
在这种情况下,我通常尝试覆盖会话存储路径,并查看会话是否在请求之间停留。
下面的代码应该放在请求生命周期的最早点。(在执行任何其他代码之前)

<?php

    //DEFINE THE CUSTOM SESSION STORAGE PATH
    $session_save_path = '/path/to/custom/session/storage';

    //MAKE THE FOLDER IF NEEDED
    if(!file_exists($session_save_path)) mkdir($session_save_path, 0755, true);

    //SET THE SESSION TO USE THE CUSTOM PATH
    session_save_path(realpath($session_save_path));

    //START THE SESSION IF POSSIBLE
    if(!session_id()) session_start();

    ...

请参阅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?

bqjvbblv

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会话数据后,您的所有提示都引导我得出了这个结论。
谢谢你们

js4nwp54

js4nwp544#

据我所知,会话数据已丢失。如果我理解正确,您可以尝试更新服务器的写入权限。
看起来像;
sudo chmod 1777 -R /home/您的用户路径/tmp/

相关问题