簡體   English   中英

Google App Engine 中的 PHP 會話

[英]PHP session in Google App Engine

我正在嘗試將 PHP 應用程序遷移到 Google App Engine 基礎架構,並且我有一段類似的代碼可以處理會話:

 <html>
     <head>
         <link type="text/css" rel="stylesheet" href="/stylesheets/main.css" />
     </head>
     <body>
             <?php
                 session_start();
             ?>
     </body>
 </html>

使用 GAE SDK 執行它時,我收到以下錯誤,並且會話不跟蹤我之前設置的記錄:

Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: No such host is known. in C:\Users\user\Downloads\google_appengine_1.8.1\google_appengine\php\sdk\google\appengine\runtime\RemoteApiProxy.php on line 92

Warning: file_get_contents(http://localhost:63143): failed to open stream: php_network_getaddresses: getaddrinfo failed: No such host is known. in C:\Users\user\Downloads\google_appengine_1.8.1\google_appengine\php\sdk\google\appengine\runtime\RemoteApiProxy.php on line 92

Notice: Undefined offset: 0 in C:\Users\user\Downloads\google_appengine_1.8.1\google_appengine\php\sdk\google\appengine\runtime\Memcache.php on line 564

我在php.ini文件中設置了以下值:

session.save_handler = user
session.save_path = Memcache

有人知道我是否需要設置一些缺少的配置才能使用會話?

編輯:

我從項目文件夾中刪除了php.ini文件,但仍然出現一些錯誤,上次沒有出現 2 個不同的警告:

Warning:  file_get_contents(): php_network_getaddresses: getaddrinfo failed: No such host is known.  in C:\Users\user\Downloads\google_appengine_1.8.1\google_appengine\php\sdk\google\appengine\runtime\RemoteApiProxy.php on line 92

Warning:  file_get_contents(http://localhost:50074): failed to open stream: php_network_getaddresses: getaddrinfo failed: No such host is known.  in C:\Users\user\Downloads\google_appengine_1.8.1\google_appengine\php\sdk\google\appengine\runtime\RemoteApiProxy.php on line 92

Warning:  session_start(): Cannot send session cookie - headers already sent by (output started at C:\Users\user\Downloads\google_appengine_1.8.1\helloworld\helloworld.php:7) in C:\Users\user\Downloads\google_appengine_1.8.1\helloworld\helloworld.php on line 8

Warning:  session_start(): Cannot send session cache limiter - headers already sent (output started at C:\Users\user\Downloads\google_appengine_1.8.1\helloworld\helloworld.php:7) in C:\Users\user\Downloads\google_appengine_1.8.1\helloworld\helloworld.php on line 8

我在 Windows 7 Enterprise x64、php-5.4.13-Win32-VC9-x86 和 google_appengine_1.8.1 上運行。

如果有人再次點擊此頁面,但此處的解決方案不起作用,但會出現“標頭已發送”錯誤:

嘗試另存為不帶 BOM 的 UTF-8。 這通常是一個空白錯誤,並且 BOM 通常被讀取為在任何事情發生之前輸出的字符。

GAE PHP 中的 Session 會自動存儲在 memcache 中,您無需進行任何配置。

您能否刪除您的 php.ini 文件並查看問題是否仍然存在?

看起來你可能發現了一個錯誤。 具體來說,通過在 PHP.ini 中設置會話處理程序,PHP 解釋器正在嘗試直接通過網絡訪問 memcached 服務器,而不是 dev_appserver 提供的實現。

您是否介意在以下網址報告: https ://code.google.com/p/googleappengine/issues/list?q=label:Language-PHP&sort=-stars

此外,Google App Engine 實際上默認使用 Memcache 進行會話,如https://developers.google.com/appengine/docs/php/#Sessions中所述,無需任何自定義配置。

在使用 Google App Engine 部署我的應用程序時,我也遇到了 php session_start() 函數的問題; 我有以下警告:
警告:session_start():無法發送會話 cookie - 標頭已由...發送

警告:session_start():無法發送會話緩存限制器 - 標頭已發送...

我終於明白了,Google App Engine 會自動創建一個會話,所以你不需要自己創建一個。

繼續在會話變量中保留您想要的任何內容,然后嘗試在其他地方檢索它。 你不會有任何錯誤。

這里要記住的是,您不需要自己使用 session_start() 來啟動會話,Google App Engine 已經啟動了一個會話,因此您只需使用它即可。

實際上,錯誤是因為您應該從會話開始。
session_start() 必須是代碼中的第一件事。
嘗試這個:

<?php
  session_start();
?>
 <html>
     <head>
         <link type="text/css" rel="stylesheet" href="/stylesheets/main.css" />
     </head>
     <body>

     </body>
 </html>

GAE PHP 中的 Session 會自動存儲在 memcache 中,您無需進行任何配置。

對我非常誤導。 它可能在當時起作用。 如今,默認情況下,每個 PHP 實例都有自己的 PHP 會話管理。 如果您喜歡存儲在 Google GAE 內存緩存中的集中式 PHP 會話管理,則必須對其進行配置!

一個可行的遺留解決方案:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM