PHP会话变量在.htaccess url重写后丢失

时间:2013-01-05 04:34:13

标签: .htaccess mod-rewrite session-variables php

我遇到的问题是在页面之间导航时没有保存其中一个会话变量,但是当我尝试直接通过php文件访问页面时它确实被保存了。 例如:

当我以这种方式访问​​页面时: “http://www.domain.com/products/honey-4-dozes” 然后离开它,这就是$ _SESSION数组的内容:

Array
(
    [curr_sku] => honey4doz
    [username] => testuser
    [firstname] => John
    [lastname] => Doe
)

但是当我直接以这种方式访问​​页面时: “http://www.domain.com/product.php?product=honey-4-dozes” 然后离开它,这就是$ _SESSION数组的内容:

Array
(
    [curr_sku] => 
    [username] => testuser
    [firstname] => John
    [lastname] => Doe
)

我也在检查会话ID的任何更改,但ID不会在整个过程中发生变化。在不同页面上创建的实际用户名,名字和姓氏字段在页面之间传递就好了。有什么想法可能会发生这种情况吗?

$ _ SESSION ['curr_sku']变量在product.php页面上创建。

这是我使用的重写规则: RewriteRule ^ products /(.*+)$ product.php?product = $ 1 [QSA]

这也是session_get_cookie_params()获得的会话cookie参数的内容:

{
    [lifetime] => 0
    [path] => /
    [domain] => 
    [secure] => 
    [httponly] => 
)

设置变量的部分代码:

$result = mysqli_query($link,"SELECT * FROM products WHERE url = '$curr_product'");
$row = mysqli_fetch_array($result); 
$_SESSION['curr_sku']=$row['sku'];

1 个答案:

答案 0 :(得分:0)

尝试使用:

http://www.domain.com/products/honey-4-dozes

RewriteRule ^products/(.*+)$ product.php?product=$1 [QSA]

对于http://www.domain.com/products/product=honey-4-dozes

RewriteRule ^products/product=(.*+)$ product.php?product=$1 [QSA]

我希望,我可以帮忙。