繁体   English   中英

将 SESSION 变量添加到 url

[英]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 设置会话变量

据我所知,无法直接从 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

基于此报价

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 重写规则才能调用正确的脚本。

只是一个旁注

你应该记住不同的概念。 GETSESSION不仅不同,而且根本不同。 似乎您在这里混淆了很多,您应该掌握正确的基础知识,不要完全搞砸。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM