Tôi đã cố gắng gỡ lỗi vấn đề này trong nhiều giờ, nhưng không có kết quả. Tôi đã sử dụng PHP trong nhiều năm, và đã trở lại nó sau một thời gian gián đoạn dài, vì vậy tôi vẫn còn một chút gỉ.Biến phiên dựa trên PHP không giữ lại giá trị. Hoạt động trên localhost, nhưng không phải trên máy chủ
Dù sao, các $ _SESSION vars của tôi không giữ lại giá trị của họ vì một số lý do mà tôi không thể tìm ra. Các trang web đã làm việc trên localhost hoàn hảo, nhưng tải nó lên máy chủ dường như phá vỡ nó.
Điều đầu tiên tôi đã kiểm tra là cài đặt máy chủ PHP.ini. Mọi thứ đều ổn. Trong thực tế, hệ thống đăng nhập của tôi là phiên dựa và nó hoạt động hoàn hảo. Vì vậy, bây giờ mà tôi biết $ _SESSIONS đang hoạt động đúng và giữ lại giá trị của họ cho đăng nhập của tôi, tôi giả sử máy chủ được thiết lập và vấn đề là trong kịch bản của tôi.
Đây là phiên bản bị tước mã đang gây ra sự cố. $ type, $ order và $ style không được giữ lại sau khi chúng được thiết lập thông qua biến GET. Người dùng nhấp vào liên kết, đặt biến qua GET và biến này được giữ lại cho phần còn lại của phiên của họ.
Có vấn đề gì với logic của tôi mà tôi không thấy?
<?php
require_once('includes/top.php'); //first line includes a call to session_start();
require_once('includes/db.php');
$type = filter_input(INPUT_GET, 't', FILTER_VALIDATE_INT);
$order = filter_input(INPUT_GET, 'o', FILTER_VALIDATE_INT);
$style = filter_input(INPUT_GET, 's', FILTER_VALIDATE_INT);
/*
According to documentation, filter_input returns a NULL when variables
are undefined. So, if t, o, or s are not set via URL, $type, $order and $style
will be NULL.
*/
print_r($_SESSION);
/*
All other sessions, such as the login session, etc. are displayed here. After
the sessions are set below, they are displayed up here to... simply with no value.
This leads me to believe the problem is with the code below, perhaps?
*/
// If $type is not null (meaning it WAS set via the get method above)
// or it's false because the validation failed for some reason,
// then set the session to the $type. I removed the false check for simplicity.
// This code is being successfully executed, and the data is being stored...
if(!is_null($type))
{
$_SESSION['type'] = $type;
}
if(!is_null($order))
{
$_SESSION['order'] = $order;
}
if(!is_null($style))
{
$_SESSION['style'] = $style;
}
$smarty->display($template);
?>
Nếu bất cứ ai có thể chỉ cho tôi đúng hướng, tôi sẽ đánh giá cao điều đó. Cảm ơn.
Tôi cũng đã trải nghiệm điều đó một lần. Nó chỉ là khủng khiếp nếu bạn không mong đợi hành vi kỳ quặc như vậy. – Gumbo
@Foo cảm ơn bro! Bạn đã lưu 5 giờ của tôi. Cảm ơn rất nhiều. –
Tôi vừa đăng nhập để +1 cả câu hỏi và câu trả lời của bạn. Nó khiến tôi phát điên. –