[英]Adding a SESSION variable to a url
我网站上的用户有一个主页,其中包含所有详细信息,可通过以下 URL 访问。 所有的细节都是用一个会话变量收集的,所以没有变量被传递到 URL 中,但我不想要那样。
网址看起来像这样
http://localhost/account/users
我希望它看起来像这样
http://localhost/account/users/$_SESSION["username"]
例如
http://localhost/account/users/ethan
我知道这可以使用$_GET
来完成,但是我将如何使用会话变量来做到这一点? URL 中的变量不会做任何事情,它只是为了外观。
从你的问题来看,你想要什么并不完全清楚,因此我有点分裂我的答案。
据我所知,无法直接从 URL 设置会话变量。 这将损害整个会话概念作为服务器端数据,即仅由会话 ID 引用。
假设您有一个脚本 users.php。 你基本上可以调用http://[...]/account/users.php?username=[...]
。 使用以下脚本,您可以将$_GET
超全局变量中的变量分配给$_SESSION
超全局变量。
<?php
session_start();
$_SESSION['username'] = $_GET['username']
[...] //whatever you'll want to do
?>
通过 URL 重写,您可以将 URL 简化为http://[...]/account/users/[...]
。
无论如何,你应该确保你知道你在做什么。 无论如何,当您传递用户名时,我在这里看不到$_SESSION
的优点。 而且你可能喜欢做一些输入验证。 这不应授予对只有相应用户应有权访问的资源的访问权限。
当您只想显示用户页面时,您实际上并不需要$_SESSION
超全局变量,而只需要按照我上面写的方式使用$_GET
。 考虑以下脚本
<?php
$user = get_user_by_name($_GET['username']);
display_user_page($user);
?>
不需要会话。 只需从数据库即时加载用户数据并打印出用户页面。
基于此报价
URL 中的变量不会做任何事情,它只是为了外观。
我想这正是你想要做的。 以及如何实现这种目标取决于。
如果您在 PHP 脚本中的某处生成链接,这很简单。 只需将$_SESSION['username']
到链接中的 URL 并创建相应的重写规则,将您重定向到account/users
。
当您希望能够调用http://[...]/account/users
并将浏览器移动到http://[...]/account/users/username
时,它会有点复杂。 首先,您必须有一个重写规则,将http://[...]/account/users/username
指向某种http://[...]/account/users.php?username=username
。 如果用户名为空,则从$_SESSION
获取当前用户名,创建一个<meta http-equiv="refresh" content="0; URL=http://[...]/account/users/$username">
标记以将浏览器指向正确的地址。 如果用户名不为空,则只显示用户页面。
我知道这可以使用 $_GET 来完成,但是我将如何使用会话变量来做到这一点?
由于根本没有使用该变量,因此您实际上可以在没有$_GET
的情况下使用整个内容。 你将有两个脚本
// users_redirect.php
<?php
start_session();
$username = $_SESSION['username'];
echo "<meta http-equiv='refresh' content='0; URL=http://[...]/account/users/$username'>";
?>
第二个显示用户页面
<?php
$user = get_user_by_name($_SESSION['username']);
display_user_page($user);
?>
当然,您必须在服务器中设置正确的 URL 重写规则才能调用正确的脚本。
只是一个旁注
你应该记住不同的概念。 GET
和SESSION
不仅不同,而且根本不同。 似乎您在这里混淆了很多,您应该掌握正确的基础知识,不要完全搞砸。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.