只是一個新手,所以請原諒我的錯誤。
我正在使用.shtml頁面(SSI)的網站上工作。 我正在嘗試在我的.shtml頁面中包含一個PHP腳本。 到目前爲止,一切工作正常: PHP腳本被包含在內,它完成了它的目的。 這裏是實際的例子。 有主頁(index.shtml),包括腳本調用security_check.php這個指令:當SHTML頁面包含腳本時,PHP會話不工作
<!--#include virtual="includes/security_check.php?idOp=000&idPage=0000" -->
這是security_check.php PHP代碼:
<?php
session_start();
include('config.php');
include('myfunctions.php');
include('security_functions.php');
$idOp = $_GET['idOp'];
$idPage = $_GET['idPage'];
$allowedReferer = array();
// Connection to the database (defined in myfunctions.php)
$link = DB_Connect($DBhost, $DBuser, $DBpass, 1, $DBname);
// Check if the PHP session already exists. If not, create one
// (that is insert a record in the DB and returns the id, which
// will be stored in the PHP session variable).
// user ID is 0 because not logged yet
if (!isset($_SESSION['idSess'])) {
$_SESSION['idUser'] = 0;
$_SESSION['idSess'] = create_session(); // security_functions.php
}
// Please note that create_session() correctly use $_SESSION['idUser']
// in order to do its work, even if it's not passed as a parameter
// (as it should be: $_SESSION is a superglobal!) and the same goes
// for activity_supervisor().
// Defined in security_functions.php:
// it uses both $_SESSION['idUser'] and $_SESSION['idSess']
activity_supervisor($idPage,$allowedReferer,2,$link);
mysql_close($link);
?>
在這點, 主頁正確顯示,並在其中有一個「註冊」按鈕 ,調用sign.shtml。 這sign.shtml頁面包括非常相同 security_check.php腳本 完全相同的包括已經看到所不同的是idPage參數的值,在這種情況下是0001
指令我希望腳本識別PHP會話,因此 不是創建一個新的會話,但確實創建了一個新的會話每隔時間。
我已經閱讀了所有其他與PHP會話相關的帖子不工作,我甚至嘗試過那裏提出的解決方案。
- 在session_start()是在每個腳本的頂部開始寫,因爲有只是一個腳本
- 的session.save_path等於到/ var/lib中/ PHP /會話,並且是可寫的Web服務器
- 我已經嘗試過設置session.gc_probability = 0並重新啓動web服務器(無濟於事,所以我回到session.gc_probability = 1)
- 我用不同的瀏覽器(即Firefox和Chrome)嘗試了相同的結果
所以我嘗試了下面的測試(注意session_start()之前的那兩個空行):我總是用空間指令這種方式來提高可讀性) cre阿婷一個簡單的腳本test.php的
<?php
session_start();
if (!isset($_SESSION['foo'])) {
$_SESSION['foo'] = 1;
echo ('Value is '.$_SESSION['foo'].'<br/>');
echo ('<a href="test.php">Refresh</a>');
}
else {
$_SESSION['foo']++;
echo ('Value is '.$_SESSION['foo'].'<br/>');
echo ('<a href="test.php">Refresh</a>');
}
?>
好吧,不管你信不信,我每次打「刷新」, 是增加價值,所以PHP識別會話(在test.php的腳本里面與index.shtml和sign.shtml頁面相同的域)。
我甚至試圖讓PHP腳本顯示一個.html文件(不是.shtml)的鏈接,然後顯示一個test.php鏈接。它工作正常!
當PHP腳本包含到.shtml頁面時,即使看不到任何理由,它確實似乎沒有正確設置會話。也許你知道爲什麼,首先是如何規避這種無聊的行爲?它是一個功能嗎?它取決於php.ini中的參數設置嗎?
最後提示:
OS:CentOS的6.3 2.6.32-279.el6.x86_64內核
Server版本:阿帕奇/ 2.2。15(Unix)
PHP 5.3.3
服務器是我的,所以我可以配置一切,如果需要的話。
在此先感謝並原諒我發表了長篇文章:我試圖使其明確表明PHP會話在我所知的其他任何情況下都能夠完美地工作。
TL; DR但是...您是否知道您正在插入PHP腳本的**輸出**,而不是其代碼? –
如果您只是使用PHP包含而不是SSI作爲會話腳本,那將會簡單得多。 – Derek
您不能調用'session_start()'或任何需要使用mod_include(SSI)修改頭文件的任何東西。將URL直接連接到PHP腳本或使用ESI。 – symcbean