链接更改SESSION var

时间:2017-11-18 20:03:45

标签: session e-commerce session-variables

我有一个电子商务网站的列表页面,其中包含各种项目(item_list.php)。此页面是使用PHP循环生成的,并在<li>元素中显示每个项目。每个项目都是指向同一页面的链接,名为item_details.php。

当点击链接时,我想运行一个脚本,将SESSION var更改为某个$ id(将使用.innerHTML函数从<li>本身中删除),然后允许浏览器进入下一页(item_details)。

这是必要的,所以我可以显示每个项目的正确信息。

我认为这可以通过Ajax实现,但我更喜欢只使用JS和PHP的解决方案。

(P.S.This是一个大学项目,我仍然是一个PHP新手,我试着寻找一个好的答案,但无法找到解决方案)

1 个答案:

答案 0 :(得分:0)

没有JS或其他客户端代码可以设置会话值,所以你需要对php进行ajax调用,或者需要一些解决方法。这不是一个完整的答案,而是让你思考的东西并希望再次进行该项目。

显而易见的答案是将其包含在链接中,然后从$ _GET -array中使用PHP获取它,并正确过滤它。

<a href="item_details.php?id=123">item title</a>

但是,如果出于某种原因,这不是一个明显答案的问题:

1。)通过回调和ajax调用可以实现最接近你的目标。这个想法是让实际的链接有一个click函数,返回false所以链接不会立即触发,也会调用ajax post请求,最终将使用document.location重定向您的浏览器。

我强烈反对此建议,因为这会阻止ctrl-clicks导致有缺陷的用户体验。

在这里查看一些代码示例,您可以修改它们。您还需要一个实际设置会话值的ajax.php文件。 https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#product-click

2。)现在,一个可能稍微好一点的方法,如果你真的需要做这个客户端,可以使用一个点击处理程序,而不是直接执行ajax调用或设置会话,将使用jQuery设置cookie,然后在item_list.php -page上访问此数据。 请在此处查看更多信息和说明:https://www.electrictoolbox.com/jquery-cookies/

<script>
$('product_li a).click(function(){
    $.cookie("li_click_data", $(this).parent().innerhtml());
    return true;
});
</script>
......
<li class="product_li"><a href="xxx">your product title</a></li>

在你的目标php文件中检查cookie 。请记住,此cookie可以设置为任何内容,因此永远不要信任用户数据。测试并过滤它,以确保您的代码不会受到损害。我不知道你想用这些数据做什么。

$_COOKIE['li_click_data'];

3。)最后,作为最佳方法,您应该查看当前的代码,看看是否有可以重新设计的内容。这是一个简单的例子。

你可以在php中执行以下操作,在每个页面加载时在会话中保存值的数组,然后获得该值,前提是你有一些id或其他可用的项目标识符:

// for list_items.php
foreach($item as $i) {
    // Do what you normally do, but also set an array in the session.
    // Presuming you have an id or some other means (here as item_id), to identify
    // an item, then you can also access this array on the item_details -page.
    $_SESSION['mystic_item_data_array'][$i['item_id]] = $i['thedata'];
}

// For item_details.php
$item_id = // whatever means you use to identify items, get that id.
$data_you_need = $_SESSION['mystic_item_data_array'][$item_id];

<强>最后

以上所有方式均可用于小型数据,如上一页,过滤器,按键等。

基本上,只有在客户端实际生成数据时才应使用1和2(客户端)。如果你已经在PHP中使用它,那么也可以在php中处理它。

如果您打算存储实际的html,那么只需在另一页上重新生成,然后使用上述方法之一存储小数据,以备不时之需。

我希望这能让你前进并至少考虑如何解决你的项目。祝你好运!