PHP会话存储第一页而不是第二页的数据

时间:2014-08-06 15:20:06

标签: php session

我正在尝试使用会话在页面之间传递变量。当我将代码部署到我的服务器时,代码可以正常工作,但在本地开发期间却没有。一些背景信息,当我将开发移动到我正在使用MAMP的mac时,会话中断了(尽管我在我的Windows计算机上也使用了MAMP)。我确保我的save_path在php.ini中定义,文件夹是可写的。会话保留第一页的数据,但是当我进入第二页时会话丢失所有数据。

这是我的代码: 第一页(这是有效的):

session_start();

// retrieve Application Name and API Key
$_SESSION['appName'] = $_POST['appName'];
$_SESSION['apiKey'] = $_POST['apiKey'];
$appName = $_SESSION['appName'];
$apiKey = $_SESSION['apiKey'];

// create app and connection
$app = establishConnection($appName, $apiKey);

第二页(这是数据丢失的地方):

session_start();

// set default timezone
date_default_timezone_set('America/New_York');

// include openrate sdk
require_once('src/isdk.php');
include 'src/openratesdk.php';

ini_set ('display_errors', 1);
error_reporting (E_ALL & ~E_NOTICE | E_STRICT);

// retrieve Application Name and API Key
$appName = $_SESSION['appName'];
$apiKey = $_SESSION['apiKey'];

// create app and connection
$app = establishConnection($appName, $apiKey);

我知道代码是正确的,因为它一直有效,直到我将代码移到Mac上,因此我确信它与php.ini文件有关,但我无法弄清楚它是什么。任何帮助将不胜感激。

这也是我的phpinfo():

Session Support enabled
Registered save handlers    files user
Registered serializer handlers  php_serialize php php_binary

Directive   Local Value Master Value
session.auto_start  Off Off
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly Off Off
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    no value    no value
session.entropy_length  0   0
session.gc_divisor  100 100
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 4   4
session.hash_function   0   0
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   /Applications/MAMP/tmp/php  /Applications/MAMP/tmp/php
session.serialize_handler   php php
session.upload_progress.cleanup On  On
session.upload_progress.enabled On  On
session.upload_progress.freq    1%  1%
session.upload_progress.min_freq    1   1
session.upload_progress.name    PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix  upload_progress_    upload_progress_
session.use_cookies On  On
session.use_only_cookies    On  On
session.use_strict_mode Off Off
session.use_trans_sid   0   0

[最新编辑]:当我查看我的会话时,我注意到它为第二页加载创建了一个全新的会话,而不是访问已创建的会话。

3 个答案:

答案 0 :(得分:1)

您确定/系统中存在/ Applications / MAMP / tmp / php。

session.save_path   /Applications/MAMP/tmp/php  /Applications/MAMP/tmp/php

更改系统中存在的路径,例如Windows

session.save_path   "c:/tmp" 

c:/ tmp就像我在C驱动器中命名的文件夹tmp一样。

就像你需要在Mac上检查一个存在的正确目录一样。

答案 1 :(得分:0)

确定会话未启用且MAMP与WAMP和XAMPP不同。再次检查权限。没有在第一页中,会话也无法正常工作。

答案 2 :(得分:0)

我找到了一个解决方案。在调用session_start()之前,我必须具体化会话ID。我不完全理解为什么这是必要的,因为默认情况下,会话已经开始应该继续,所以如果有人能解释为什么这是必要的,那就太好了。

session_id('OPENRATE');
session_start();