[英]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.