我是PHP的新手.在学习PHP语言的路径中,我注意到,某些网站会出现这种URL:
www.website.com/profile.php?user=roa3&...
我的问题:
是什么 "?" 符号用于?
如果我开发一个php网站,我必须在我的URL中使用它吗?例如,在用户(roa3)成功登录后,我将重定向到"www.website.com/profile.php?user=roa3"而不是"www.website.com/profile.php"
使用它有哪些优缺点?
Ray Lu.. 22
好的问题,简单地说,
"?" 代表查询字符串的开始,该字符串包含要传递给服务器的数据.在这种情况下,您将user = roa3传递给profile.php页面.您可以在profile.php中使用$ _GET ['user']来获取数据.querystring是从客户端代理向服务器发送数据的方法之一.另一个将数据放在HTTP正文和POST中给服务器,你没有直接从浏览器看到HTTP POST数据.
querystring可以由用户编辑,并且对公众可见.如果www.website.com/profile.php?user=roa3旨在公开,那么它很好,否则您可能希望使用会话来获取当前用户的上下文.
它是一种将数据传递到服务器的灵活方式,但它对于用户是可见的和可编辑的,对于某些敏感数据,至少在将其附加到查询字符串之前产生某种哈希,这会阻止用户编辑它或理解它的意思.然而,这并不妨碍一个体面的黑客对您的网站做错事.不同的浏览器支持不同的URL最大长度,冗长的URL由这些查询字符串参数组成.如果要发送大量数据,请将数据放在HTTP正文中并POST到服务器.
William Holr.. 6
到目前为止我看到的大多数答案都是用PHP来实现的,而实际上这并不是特定于语言的.到目前为止给出的答案来自PHP的观点,您将用于访问信息的方法因语言而异,但数据在URL中的格式(称为查询字符串)将保留相同(例如:page.ext?key1 = value&key2 = value&...).
我不知道你的技术背景或知识,所以请原谅我......
网页有两种不同的方法可以将数据提供回Web服务器.这些被称为POST或GET方法.还有一些其他的,但在处理普通用户时,这些都不应该用于任何类型的网页设计.POST方法以隐形方式发送到服务器,用于"上传"数据,而GET方法对于用户可见,作为URL中的查询字符串,仅用于字面上"获取"信息.
并非所有网站都遵循此经验法则,但可能存在原因.例如,一个站点可以专门使用POST来绕过代理服务器或浏览器的缓存,或者因为它们使用双字节语言,并且由于编码转换而在尝试执行GET时可能会导致问题.
关于这两种方法的一些资源以及何时使用它们......
http://www.cs.tut.fi/~jkorpela/forms/methods.html http://weblogs.asp.net/mschwarz/archive/2006/12/04/post-vs-get.aspx http:/ /en.wikipedia.org/wiki/Query_string
现在从严格的PHP位置,现在有3个不同的数组可用于获取网页发送回服务器的信息.你需要处理......
$ _POST ['keyname'],仅从POST方法中获取信息
$ _GET ['keyname'],仅从GET方法中获取信息
$ _REQUEST ['keyname'],允许您获取POST,GET以及可能已提交的任何COOKIE信息.排序等等,特别是在您不知道页面可能用于提交数据的方法的情况下.
直接使用$ _REQUEST方法不要马虎.除非你有一个像我上面提到的$ _REQUEST变量的情况,否则不要使用它.在安全性方面,你想尝试使用'拒绝所有,并且只允许x,y,z'方法.只查找您知道自己的网站将要发送的数据,只查找您期望的组合,并在使用之前清除所有信息.例如..
永远不要对通过上述方法传递的任何东西进行eval().我从来没有见过这样,但这并不意味着人们没有尝试或做过.
切勿直接在数据库中使用这些信息而不进行清理(如果您不熟悉它们,请研究SQL注入攻击)
到目前为止,这不是最终的全部,而是PHP安全性,但我们不是为此而已.如果你想了解更多信息,那么那就是SO的另一个问题.
希望这有帮助,并随时提出任何问题.
好的问题,简单地说,
"?" 代表查询字符串的开始,该字符串包含要传递给服务器的数据.在这种情况下,您将user = roa3传递给profile.php页面.您可以在profile.php中使用$ _GET ['user']来获取数据.querystring是从客户端代理向服务器发送数据的方法之一.另一个将数据放在HTTP正文和POST中给服务器,你没有直接从浏览器看到HTTP POST数据.
querystring可以由用户编辑,并且对公众可见.如果www.website.com/profile.php?user=roa3旨在公开,那么它很好,否则您可能希望使用会话来获取当前用户的上下文.
它是一种将数据传递到服务器的灵活方式,但它对于用户是可见的和可编辑的,对于某些敏感数据,至少在将其附加到查询字符串之前产生某种哈希,这会阻止用户编辑它或理解它的意思.然而,这并不妨碍一个体面的黑客对您的网站做错事.不同的浏览器支持不同的URL最大长度,冗长的URL由这些查询字符串参数组成.如果要发送大量数据,请将数据放在HTTP正文中并POST到服务器.
到目前为止我看到的大多数答案都是用PHP来实现的,而实际上这并不是特定于语言的.到目前为止给出的答案来自PHP的观点,您将用于访问信息的方法因语言而异,但数据在URL中的格式(称为查询字符串)将保留相同(例如:page.ext?key1 = value&key2 = value&...).
我不知道你的技术背景或知识,所以请原谅我......
网页有两种不同的方法可以将数据提供回Web服务器.这些被称为POST或GET方法.还有一些其他的,但在处理普通用户时,这些都不应该用于任何类型的网页设计.POST方法以隐形方式发送到服务器,用于"上传"数据,而GET方法对于用户可见,作为URL中的查询字符串,仅用于字面上"获取"信息.
并非所有网站都遵循此经验法则,但可能存在原因.例如,一个站点可以专门使用POST来绕过代理服务器或浏览器的缓存,或者因为它们使用双字节语言,并且由于编码转换而在尝试执行GET时可能会导致问题.
关于这两种方法的一些资源以及何时使用它们......
http://www.cs.tut.fi/~jkorpela/forms/methods.html http://weblogs.asp.net/mschwarz/archive/2006/12/04/post-vs-get.aspx http:/ /en.wikipedia.org/wiki/Query_string
现在从严格的PHP位置,现在有3个不同的数组可用于获取网页发送回服务器的信息.你需要处理......
$ _POST ['keyname'],仅从POST方法中获取信息
$ _GET ['keyname'],仅从GET方法中获取信息
$ _REQUEST ['keyname'],允许您获取POST,GET以及可能已提交的任何COOKIE信息.排序等等,特别是在您不知道页面可能用于提交数据的方法的情况下.
直接使用$ _REQUEST方法不要马虎.除非你有一个像我上面提到的$ _REQUEST变量的情况,否则不要使用它.在安全性方面,你想尝试使用'拒绝所有,并且只允许x,y,z'方法.只查找您知道自己的网站将要发送的数据,只查找您期望的组合,并在使用之前清除所有信息.例如..
永远不要对通过上述方法传递的任何东西进行eval().我从来没有见过这样,但这并不意味着人们没有尝试或做过.
切勿直接在数据库中使用这些信息而不进行清理(如果您不熟悉它们,请研究SQL注入攻击)
到目前为止,这不是最终的全部,而是PHP安全性,但我们不是为此而已.如果你想了解更多信息,那么那就是SO的另一个问题.
希望这有帮助,并随时提出任何问题.