代码之家  ›  专栏  ›  技术社区  ›  Tom

如何使用会话代替查询字符串

php
  •  1
  • Tom  · 技术社区  · 17 年前

    php?var1&var2&id=1

    这就是我的绳子的样子。我在数据库中循环浏览结果,并为每一行指定了id,这样当用户单击他们想要的行时,我就可以了,但我不确定如何使用会话来实现这一点。

    谢谢

    编辑: 我正在开发一个电子邮件类型的系统,发送者和接收者在其中获取和发送邮件。存储在服务器上的每封邮件都有自己的唯一密钥。目前,我正在使用该号码检索邮件,但问题是我不希望人们更改该号码并阅读其他人的邮件。我可能会使用GUID来进行此操作,甚至可以使用某种哈希,但我真的很讨厌长的查询字符串。我只是在想,如果有办法把身份证全部“隐藏”起来,那会干净得多。

    4 回复  |  直到 17 年前
        1
  •  3
  •   Tyler Carter    17 年前

    更新(再次…是的,我知道。)

    更新

    老实说,阻止人们阅读他人邮件的最佳方法是建立一个关系表,其中说明只有X个人才能访问Y电子邮件(通过id)。或者有一个字段说明谁是电子邮件的“所有者”。

    事实上,用户仍然可以访问POST参数,并且可以轻松地伪造自己的POST参数。这意味着,任何人都可以实际访问任何其他人的电子邮件,如果他们知道命名方案的话。

    在理想的系统中,将有一个发送者和一个接收者(接收者可以是逗号分隔的值)。只有那些列中的人才能访问电子邮件。


    首先从调用session_start()开始,然后检查以前脚本中的变量。如果它们不存在,则生成它们。如果是,抓住它们并使用它们。

    session_start();
    
    if(!isset($_SESSION['db_key']))
    {
        $_SESSION['db_key'] = // generate your database key
    }
    else
    {
        $db_key = $_SESSION['db_key'];
    }
    

    第一 然后你可以从中分配或获取任何你喜欢的东西。

    还可以查看php.net中关于 Sessions

        2
  •  1
  •   deceze    17 年前

    您需要一些变量来决定页面上显示的内容。这些变量正在URL中传递。到目前为止一切正常。现在要隐藏这些变量并将其保存在会话中吗?

    http://mysite.com/page?var1=x&var2=y
    

    显示唯一的页面。无论何时访问上述URL,都会得到相同的页面。

    http://mysite.com/page
    

    这当然是可能的,但这意味着您需要跟踪用户在服务器上的操作。也就是说,“用户点击了‘下一页’,我最后一次看到他时,他在第X页,所以他现在应该在第Y页,所以当他下次请求网站时,我会给他显示第Y页。”

    这需要做很多工作,如果用户开始使用后退按钮,事情很快就会变得尴尬。我认为这不是个好主意。

    如果您需要从URL中提取敏感信息,请以某种方式对其进行模糊处理(散列),或者使用本身没有任何意义的替代值。

    当然,这完全取决于您的应用程序,如果用户在多个页面上积累数据,那么会话显然是一种方式。你能更详细地描述一下你的应用程序在做什么吗?

    编辑:

    但问题是,我不希望人们改变号码,阅读别人的邮件

    如果你最关心的是安全,那无论如何都是错误的做法。默默无闻的安全是行不通的。在向用户显示某条信息之前,您需要明确检查是否允许用户查看该信息,而不是仅仅依靠用户猜不到正确的id。

        3
  •  0
  •   Freddy    17 年前

    这里有一些关于如何在php上使用$\u会话的示例。

    Registering a variable with $_SESSION

        4
  •  0
  •   Extrakun    17 年前

    使用会话来代替S$\u GET或$\u POST的问题在于,您需要某种方法来读取用户的输入,以便将其存储在会话中,并且需要一种方法来触发页面刷新。传统的方法是通过超链接,默认为GET(除非使用Javascript),或者通过表单,默认为POST。

    也许ajax会在这里帮助你。用户在表单或复选框中输入信息后,使用JS发送请求,将信息插入PHP并发送回,无论是刷新页面还是填充内容。

    希望这有帮助

    推荐文章