通过为每个链接传递会话id,将动态生成的链接链接到php


Linking dynamically generated links to php, by passing session id for each link

我在item.php中有这个代码:

while ($row = mysqli_fetch_array($res)) {
$link .= '<br><a href="item.php?id='.$row['item_id'].'">'.$row['item_name'].'</a><br>';
}
echo $link;

因此,这会根据(数据库中)有多少结果生成链接,假设用户有4个项目,它会将项目名称显示为超链接,但我不确定如何将其链接到我的itemdetail.php。因此,每个项目都会链接到itemdetail.php,但它们将具有从mysql数据库中获取的唯一信息。

目前,我只想让itemdetail.php回复项目名称,但我现在想要的是,我想根据itemid为每个链接生成一个唯一的会话id,所以当我按下它时,会话id会传递给itemdetail.php,从那里我可以将会话id作为字符串传递,并从mysql中提取数据(这很简单,所以不需要这方面的帮助)。

我知道如何在页面之间传递会话id,但这只适用于固定链接(已经存在的按钮),但我不知道如何对生成的按钮/链接执行此操作。

仅供参考,我的url确实显示/item.php?id=12345,12345是我的item_id,如果有帮助的话。这是当我点击生成的链接时(所以从/item.php到/item.php?id=12345,或者每个链接的itemid是什么),但当然,除了更改url,链接什么都不做。

tl;dr为每个生成的链接创建一个唯一的id(最简单的方法可能是获取item_id并使用它),将唯一的id作为会话传递,然后在另一个php中回显会话。

提前感谢您的任何有益见解。

itemdetail.php

<?php
session_start();
include('connection.php'); 
echo $_SESSION['advert'];
$aName = $_SESSION['advert'];
?>

atm什么也没发生,因为item.php中的按钮没有连接到这个。如果我尝试:

while ($row = mysqli_fetch_array($res)) {
$link .= '<br><a href="item.php?id='.$row['item_id'].'">'.$row['item_name'].'</a><br>';
if($link == true) {
 header("Location:item.php");
}

我得到"标头已发送"错误

如果像现在这样传递项目ID,则要访问它,请使用类似$_REQUEST['id']的东西。

如果您实际询问的是会话ID(与问题中显示的应用程序级项目ID不同):

会话ID通常通过Cookie传递。

PHP将在没有重要应用程序代码的情况下为您实现这一点。您只需要调用session_start(),用户的会话数据就会在$_SESSION全局中可用。

在后台,这是通过让服务器通过设置的cookie头将会话ID传递给客户端来实现的,客户端的浏览器会将其附加到未来对同一服务器的所有请求中。在服务器端,会话ID连接到数据存储(默认情况下,文件在本地文件系统上,但根据PHP配置,可以是数据库或其他任何文件)。

我不完全确定你想要实现什么。

如果您希望页面item.php显示项目列表(如果未指定id),则只需使用if ($_REQUEST['id'])来分隔这两种情况。(处理输入时要小心!)

如果项目id不足以唯一地识别项目(它应该这样做),那么也可以将其他信息添加到url中:

$link .= '<br><a href="item.php?id='.$row['item_id'].'&sid='.session_id().'">'.$row['item_name'].'</a><br>';

如果直接使用session_id()有问题,可以做两件事:

  1. 在发送标头之前调用session_id(),并将id存储在变量中
    $SID = session_id()之类的
  2. 缓冲输出直到最后。参见ob_start()

但是,如果您希望显示列表中的项目具有相同的标识符,但根据查看它们的用户不同,则必须提供更多的详细信息。

可以调整item.php?id=N中的逻辑以考虑$SID,并将接收到的id N转换为数据库中使用的项目的unique id。完全取决于您的特定应用。。。

您还可以使用php方便地为您维护的$_SESSION数组。生成链接时,将所需的信息(例如unique item id)存储在那里。然后,下次加载item.php?id=1时,您可以访问$_SESSION['item_links'][$n]

再说一遍,我不太明白你在问什么。