PHP Session存储第一页的数据,但不存储第二页的数据


PHP Session stores data for first page but not second page

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

下面是我的代码:第一页(这个有效):
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

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

你确定/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文件夹一样。

和windows一样,你需要在Mac中检查一个存在的正确目录

我确定没有启用Session,并且MAMP与WAMP和XAMPP不同。再次检查权限。

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

session_id('OPENRATE');
session_start();