Google App Engine中的PHP会话

时间:2013-06-28 21:23:03

标签: php google-app-engine session

我正在尝试将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上运行。

5 个答案:

答案 0 :(得分:1)

如果有人再次点击此页面,但此处的解决方案无效,但是已经发送了#34;标题已经发送了#34;错误:

尝试在没有BOM的情况下保存为UTF-8。这通常是一个空格错误,而BOM通常被读作一个在发生任何事情之前输出的字符。

答案 1 :(得分:0)

GAE中的会话PHP自动存储在memcache中,您无需配置任何内容。

你可以删除你的php.ini文件,看看问题是否仍然存在?

答案 2 :(得分:0)

看起来你可能发现了一个错误。具体来说,通过在PHP.ini中设置会话处理程序,PHP解释器试图直接通过网络而不是dev_appserver提供的实现来访问memcached服务器。

你介意报道: 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中所述,无需任何自定义配置。

答案 3 :(得分:0)

在使用Google App Engine部署我的应用程序时,我还遇到了php session_start()函数的问题;我有以下警告:
警告:session_start():无法发送会话cookie - 已经由...发送的标题

警告:session_start():无法发送会话缓存限制器 - 已发送的标头...

我终于明白Google App Engine会自动创建一个会话,因此您不需要自己创建会话。

只需继续并在会话变量中保留您想要的任何内容,并尝试在其他地方检索它。你不会有任何错误。

这里需要记住的是,您不需要自己使用session_start()启动会话,其中一个已经由Google App Engine启动,因此您只需使用它。

答案 4 :(得分:0)

实际上,该错误是因为您应该在会话之前开始。
session_start()必须是代码中的第一件事。
试试这个:

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

     </body>
 </html>