我多年來一直將我的網站托管在 1and1 服務器上,并且運行良好(php 7.4)。
因為,我決定為我的網路服務器(php 8.1.2)切換到帶有 Linux ubuntu 作業系統的專用服務器。
遷移后一切正常,但我有一個奇怪的問題:當我從 Ajax/php 查詢中獲得重定向時,我通常將客戶端重定向(使用 JS)到所需的網頁并且會話丟失。
我確實有 session_start(); 并確保它不會從www.mywebsite.com切換到 mywebsite.com。
我很困惑,因為它是 100% 在托管服務器上運行的代碼。
其他線索,我看到cookies的批準總是提示。所以顯然存在一個會話問題,即 un_sync 客戶端/服務器 session_id。
任何配置可以確保在新的 apache 服務器上?每次觸發重定向時,我都可以在“/var/lib/php/sessions”檔案夾中看到一個新會話...
我會很感激任何建議。
這是來自 php.ini 的我的 SESSION 配置:
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
uj5u.com熱心網友回復:
session_start();應該在任何 html 輸出之前在腳本頂部宣告,包括空格。<?php session_start(); // code你也使用 session_name() 嗎?https://www.php.net/manual/en/function.session-name.php
檢查 cookie 名稱
PHPSESSID并查看它是否正在更改。例如,您可以嘗試將會話存盤在 Redis 中,也許它是一個 cron 正在洗掉您的
/var/lib/php/sessions?
uj5u.com熱心網友回復:
有時默認會話路徑可能不可寫,或者您正在使用的新服務器可能使用自定義會話處理程式。
在這種情況下,我通常會嘗試覆寫會話存盤路徑并查看會話是否停留在請求之間。
下面的代碼應該放在請求生命周期的最早點。(在執行任何其他代碼之前)
<?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 請求一起發送。
如果是這種情況,您可能希望看到這個答案: 為什么 jQuery 的 .ajax() 方法不發送我的會話 cookie?
uj5u.com熱心網友回復:
我的理解是會話資料丟失了。如果我理解正確,您可以嘗試更新服務器的寫入權限。
它看起來像;
sudo chmod 1777 -R /home/your_user_path/tmp/
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/527729.html
標籤:php阿帕奇会议
上一篇:MacbookM1上的WebStormDocker守護程式連接錯誤
下一篇:更新購物車中的會話變數
