我正在尝试使用会话在页面之间传递变量。代码工作时,我将其部署到我的服务器,但在本地开发期间,它没有。一些背景信息,当我将开发转移到使用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();