我正在尝试使用会话在页面之间传递变量。当我将代码部署到我的服务器时,代码可以正常工作,但在本地开发期间却没有。一些背景信息,当我将开发移动到我正在使用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
[最新编辑]:当我查看我的会话时,我注意到它为第二页加载创建了一个全新的会话,而不是访问已创建的会话。
答案 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();