【发布时间】:2010-07-16 21:07:00
【问题描述】:
我有一个搜索表格,用于检查两天前的可用房间。在 search.php 之后,我列出了可用的房间。我想获取预订的入住和退房日期。什么是正确的方法?
1-urlquery:
<a href="rooms.php?roomID='. $value['room'].'&in='.$checkin.'&out='.$checkin.'">
2- 为签入和结帐打开会话
提前致谢
【问题讨论】:
标签: php
我有一个搜索表格,用于检查两天前的可用房间。在 search.php 之后,我列出了可用的房间。我想获取预订的入住和退房日期。什么是正确的方法?
1-urlquery:
<a href="rooms.php?roomID='. $value['room'].'&in='.$checkin.'&out='.$checkin.'">
2- 为签入和结帐打开会话
提前致谢
【问题讨论】:
标签: php
如果使用会话,您必须注意,如果用户在其浏览器中打开多个选项卡,所有选项卡将共享同一个会话 - 可能会使代码难以编码;-)
使用 URL 就可以了;不过要小心 XSS:考虑使用 htmlspecialchars() 和/或 urlencode() 等函数正确转义输出,具体取决于具体情况。
不过有一件事:理论上,如果您的 rooms.php 脚本正在修改某些数据(例如将某些内容保存到数据库),您应该使用 HTTP POST,而不是 HTTP GET。 p>
关于这一点,您可以查看Safe methods -- 阅读Idempotent methods and web applications 也会很有趣。
【讨论】:
使用会话变量可能是更好的方法,因为它允许您在服务器端存储更多数据,并且只将会话令牌作为 cookie 传递给用户。唯一的问题是用户是否禁用了 cookie。这仅占所有用户的一小部分。
使用会话还意味着您不必为每个页面上的每个链接和每个表单添加参数,并且如果用户关闭页面(而不是浏览器)然后返回,它仍然可以工作之后。当我搜索酒店优惠时,我总是这样做。
关于 URL 参数,您应该在将所有参数传递给用户之前对其进行转义。这样做:
<?php
$url = "rooms.php?roomID=" . urlencode($value['room'])
. "&in=" . urlencode($checkin)
. "&out=" . urlencode($checkout)
?>
<a href="<?php echo $url ?>">...</a>
这样您的页面就不会受到跨站脚本攻击。
【讨论】: