2010-01-21 105 views
0

由於安全原因,register_globals設置爲關閉。 而這很糟糕,因爲現在我真的可以使用會話。如果register_globals設置爲off,我該如何使用會話?

你們如何解決這個「問題」?

UPDATE

我一直在使用$ _SESSION試過,但它不工作。這就是爲什麼我認爲這與register_globals被關閉有關。

在我的頭文件中,我有以下代碼:

session_start(); 
if (!isset($_SESSION['test'])) { 
    $_SESSION['test'] = "Foo bar"; 

現在,在我的頭文件中的任何地方,我可以輸出$_SESSION['test']內容。

但是我無法輸出相同的內容。 page.php文件。

下面是使用Wordpress一個例子:使用example.php

//Include the header file 
<?php get_header(); ?> 

    Here is some text, and this is my session: <?php echo $_SESSION['test']; ?> 

<?php get_footer(); ?> 

這將導致在一個空的會話。

+7

這不是一個「問題」,這是一個解決方案。對於一個巨大的現實問題。 – ceejayoz 2010-01-21 19:17:45

+0

確保在使用$ _SESSION數組之前調用session_start(),並確保您的文件按正確順序包含。 IE瀏覽器,如果page.php包含header.php,確保頁面只在$ require('header.php')行後面使用$ _SESSION。 – meagar 2010-01-21 19:28:32

+0

除非你故意忽略了一些PHP標籤,否則你應該在瀏覽器窗口中看到「get_header()」,並且它實際上從未被執行。 – meagar 2010-01-21 19:30:19

回答

1

所有會話變量將在$_SESSION array中。使用$_SESSION['var']而不是全球註冊的$var

+0

這就是我的想法。但我上面的例子不起作用。所以我必須錯過一些東西.. – Steven 2010-01-21 19:29:28

+0

@Steven:你使用同一個會話嗎?查看使用了什麼會話ID(請參閱'session_id'函數)。每次通話都需要保持一致。 – Gumbo 2010-01-21 19:34:10

+0

看來我必須在每個將使用會話的文件中添加session_start()。我希望這足以在頭文件中設置... – Steven 2010-01-21 19:43:58

3

使用超全局$ _SESSION數組來存儲值。它的內容存儲在請求之間,並且無縫序列化和反序列化 - 不必擔心存儲對象或數組。一個簡單的例子:

<?php 

if (isset($_SESSION['user'])) { 
    // user already logged in 
} else { 
    // Create a guest user 
    $user = new stdClass(); 
    $user->name = 'guest'; 
    $user->id = 0; 

    $_SESSION['user'] = $user; 
} 

?> 
5
+0

這是我第一次嘗試。沒有工作。 – Steven 2010-01-21 19:28:02

+0

如果你print_r($ _ SESSION);'? – ceejayoz 2010-01-21 19:32:39

+1

沒什麼。但是當我在page.php文件的頂部添加session_start()時,它工作正常。令人討厭的是,我必須在每次使用會話的文件中都包含這一點。我希望這將足以在頭文件中設置:( – Steven 2010-01-21 19:42:50

1

如果會議不工作,有幾件事情要檢查:

  • 確保會話正在被開始;如果需要,請致電session_start() - PHP.ini中有一個選項(session.auto_start)可以切換。
  • 檢查session.save_path指向可寫入的有效位置 - 檢查權限。在Windows下,默認設置是該平臺的無效路徑。
  • 檢查PHP錯誤日誌中的指針,以防出現問題。
  • 檢查瀏覽器是否阻止會話cookie。

你可以看看前面提到的session.save_path來檢查是否正在創建會話文件。

我假定使用默認的基於文件的會話處理程序。如果使用別的東西(這需要額外的配置),那麼可能需要進一步的故障排除步驟。

+0

hmm ..謝謝。不知道有'session.auto_start'。我不知道我的ISP允許我設置我自己的PHP .ini設置雖然:(但現在我知道我必須在每次使用session之前調用session_start(),我希望在我的頭文件中調用這個就足夠了 - 因爲它每次都被加載。 – Steven 2010-01-21 19:46:09

0

你使用的IIS網絡服務器? 與舊版IIS和php4有類似的「奇怪」問題。在php.ini中檢查session.save_path並確保您的web服務器對會話中配置的目錄具有寫入權限。的save_path。

2

如果您正在使用I幀faceook應用程序,您的會話可能無法在IE 野生動物園工作。 使它在這兩個瀏覽器可行使用頭部代碼的下方,略高於session_start();

  • header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"'); // Require to maintian session in IE
  • header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); // Require to maintain session in safari

希望這將有助於。

+1

你有沒有這些頭文件的引用?他們是相當神祕的! – 2012-09-09 12:16:04

+3

我沒有參考,但他們工作。@Rich Bradshaw!如果你找到一個,PLZ與我們分享。 – Saadi 2012-09-27 13:05:11

相關問題