单击<a>链接时如何设置会话变量

2022-08-31 00:41:44

我有以下问题...我想在点击普通链接时设置一个会话变量,例如:

<a href="home" name="home">home</a>

我的研究似乎指出,PHP不可能以一种设置会话变量的方式赶上点击事件。

我相信使用Ajax是可能的,但是如何做到呢?我的链接会是什么样子?
设置会话变量应如下所示:

$_SESSION['link'] = home;

简而言之:当单击HTML中的链接时,必须设置会话变量。
我该怎么做呢?

PS:我对Ajax不是很熟悉,但我会赶上的。

编辑:链接将引用同一页面,我也想避免像“home.php?link=X”这样的网址。
如果不可能以任何其他方式做到这一点,那就太糟糕了。但我希望有一个解决方案。
重要提示:链接的名称将为$_SESSION['link']


答案 1
    session_start();
    if(isset($_SESSION['current'])){
         $_SESSION['oldlink']=$_SESSION['current'];
    }else{
         $_SESSION['oldlink']='no previous page';
    }
    $_SESSION['current']=$_SERVER['PHP_SELF'];

也许这就是你要找的?它会记住您来自的旧链接/页面(在您的网站内)。

将该片段放在每页的顶部。

如果你想让它成为“刷新证明”,你可以添加另一个检查:

   if(isset($_SESSION['current']) && $_SESSION['current']!=$_SERVER['PHP_SELF'])

这将使页面不记得自己。

更新:虽然几乎和@Brandon一样...只需使用php变量,我知道这看起来像是安全风险,但当正确时,它不是。

 <a href="home.php?a=register">Register Now!</a>

菲律宾比索:

 if(isset($_GET['a']) /*you can validate the link here*/){
    $_SESSION['link']=$_GET['a'];
 }

为什么还要将 GET 存储在会话中?只需使用它。请告诉我为什么你不想使用GET。« 验证以确保更高的安全性。我也许可以用更好的脚本来帮助你。


答案 2

我遇到了同样的问题 - 我想通过单击超链接将参数传递到另一个页面,并获取值以转到下一页(不使用GET,因为参数存储在URL中)。

对于那些不明白为什么你想要这样做的人来说,答案是你不希望用户看到敏感信息,或者你不希望有人编辑GET。

在搜索互联网之后,似乎不可能使用POST方法制作正常的超链接。

然后我有一个尤里卡时刻!!!!为什么不直接使用CSS使提交按钮看起来像一个普通的超链接???...并将我要传递的值放在隐藏字段中

我试过了,它的工作原理。你可以在这里看到一个exaple http://paulyouthed.com/test/css-button-that-looks-like-hyperlink.php

表单的基本代码是:

    <form enctype="multipart/form-data" action="page-to-pass-to.php" method="post">
                        <input type="hidden" name="post-variable-name" value="value-you-want-pass"/>
                        <input type="submit" name="whatever" value="text-to-display" id="hyperlink-style-button"/>
                </form>

基本的 css 是:

    #hyperlink-style-button{
      background:none;
      border:0;
      color:#666;
      text-decoration:underline;
    }

    #hyperlink-style-button:hover{
      background:none;
      border:0;
      color:#666;
      text-decoration:none;
      cursor:pointer;
      cursor:hand;
    }

推荐