2017-01-03 29 views
1

大家好,新年快乐。 我正在建立一个不允许附加数据库的表单。这是好的,因为我使用会话来存储计算数字等所需的信息...为没有数据库的表单创建返回链接

我的问题是当用户希望返回到表单。我需要能够将表​​单数据存储在链接中,然后重新加载到用户会话中,而不会在URL中显示表单数据。

我已经尝试过会话数据,然后openssl加密/解密来实现这一点,得到空白的回应,假设这是与URL字符?我也尝试过MCRYPT,并得到了奇怪的人物。

代码($字符串总是含有形式信息的JSON编码阵列):

mcrypt的

$key = 'the password to work with'; 
$linkdata = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); 

开放SSL版本

$method = "AES-128-ECB"; 
$password = "the password to work with"; 
$linkdata = openssl_encrypt($string, $method, $password); 

对于解密怎么办?($ return_data是总是包含编码数据的$ _GET):

MCRYPT

$key = 'the password to work with'; 
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($return_data), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 
$_SESSION['hotel'] = $decrypted; 

OpenSSL的

$method = "AES-128-ECB"; 
$password = "the password to work with"; 
$linkdata = openssl_decrypt($return_data, $method, $password); 
$_SESSION['hotel'] = $linkdata; 

任何帮助将不胜感激,谢谢你们。

+0

*不允许将数据库附加到它* - 这是一个非常奇怪的要求 - *我使用会话来存储信息* - 所以你*有*一个数据库,它只是不是一个关系数据库。你应该非常仔细地检查你的要求。 – Quentin

+0

是的,对不起。由于不允许有数据库,我的意思是我不能永久存储数据。一旦表格完成,数据就会发布到我们的网络服务中,在那里它的处理和系统从信息中创建,但这只发生在整个表单完成时。所以我需要一个将会话数据转换为url并返回的方法 –

+0

是否在某处调用session_start()? http://php.net/manual/en/function.session-start.php – user3522412

回答

1

虽然代码缺失,但是在解密之前,所有内容都指向$_GET数据上使用url_decode

$_GET变量已经被url解码了,你不应该再次应用这个函数,或者你可以(显然是)搞乱你的数据。

相关问题