PHP - 用于使产品 ID 持久化的会话?
PHP - Session for making product id persistent?
我正在使用 php 和 mysql 创建产品 database/site。我已经开始使用会话变量来存储我当前的记录 ID,以供以后在以后的页面上参考。当我走得更远时,我意识到这可能不是理想的方法,因为当我想向不同的产品显示 link 时,我没有简单的方法来更新会话变量到新ID。
想象一下,如果您在产品 ID 为 73 的产品页面上。会话变量将为 $_SESSION['id'] = 73。现在您在系统中执行搜索并找到一个新的您要查看的产品。您单击 link 并被重定向到 "product page",它期望访问会话变量以了解要显示的产品,但此时变量仍设置为 73。
only/best 是否可以通过将我的变量附加到 url 字符串来使此过程与 GET 一起工作?对于这种情况,推荐的流程是什么?我试图避免使用 GET,因为我认为会话变量是此类事物的首选方法,并且我试图拥有一个干净的 URL 字符串。
"clean url" 没用,因为这样您的产品就无法被 google 这样的搜索引擎编入索引。
每个产品都应该有自己的 url。
你可以使 "speaking urls" 像 /category/product 并用 url 重写来翻译它。
会话变量更好地用于登录数据等持久性事物。
I thought session variables were the preferred method for this type of thing
完全没有。虽然您可能有一个 "product.php" 页面 用于简化和重用代码,但您没有一个 "product" 资源。任何查看给定产品详细信息的请求都是对不同资源的请求。根据 HTTP 标准,该请求的 URL 应该不同,以便 URL 可以识别该资源。
在大多数情况下,最终看起来像这样:
product.php?id=123
因此,您可以想象任何独特的产品都会通过使用数字标识符来生产独特的 URL。然而,这不是唯一的方法。
I was trying to have a clean URL string
你还是可以的。有很多方法可以做到这一点。例如,许多现代 Web 框架可能能够从请求的格式中导出标识符 URL。所以你可以使用这样的东西:
products/123
这看起来更 RESTful 因为它将标识符维护为 URL 的一部分而不是附加到 URL 的值。此外,它使资源的 products
组件复数化,这更准确地表明一个人正在从一个集合(产品)中请求一个项目 (123)。
根据您使用的框架或工具,您也许还可以使用命名标识符。所以 URL 可能看起来像这样:
products/my-awesome-product
如果任何给定产品有一个唯一的上下文名称,而不是(或者可能除了)一个唯一的数字系统标识符,这就可以工作。
重点是,使用会话状态进行简单的资源导航绝对不是首选方法。正如您现在发现的那样,它很快就会成为一个问题。会话变量的使用引入了对服务器端状态的依赖。 HTTP 在设计上是无状态的。 GET 请求不暗示状态,请求本身应该携带所请求内容的信息。
I thought session variables
were the preferred method for this type of thing and I was trying to
have a clean URL string
切勿将 sessionVariables 用于此类问题!
使用会话变量可能会遇到问题的示例:
比方说,您的产品 url 看起来像:
www.abc.com/product/bmw-q7
并且此产品的 ID 是 73 保存在会话中,所以用户想为您的 url 添加书签?后来他点击了书签link,此时,新启动的会话中没有保存id。
所以首选方法是在 url:
中附加 id
www.abc.com/product/bmw-q7?id=73
或者如果您使用 htaccess-mode-rewrite 则更好:
www.abc.com/product/bmw-q7/73
我正在使用 php 和 mysql 创建产品 database/site。我已经开始使用会话变量来存储我当前的记录 ID,以供以后在以后的页面上参考。当我走得更远时,我意识到这可能不是理想的方法,因为当我想向不同的产品显示 link 时,我没有简单的方法来更新会话变量到新ID。
想象一下,如果您在产品 ID 为 73 的产品页面上。会话变量将为 $_SESSION['id'] = 73。现在您在系统中执行搜索并找到一个新的您要查看的产品。您单击 link 并被重定向到 "product page",它期望访问会话变量以了解要显示的产品,但此时变量仍设置为 73。
only/best 是否可以通过将我的变量附加到 url 字符串来使此过程与 GET 一起工作?对于这种情况,推荐的流程是什么?我试图避免使用 GET,因为我认为会话变量是此类事物的首选方法,并且我试图拥有一个干净的 URL 字符串。
"clean url" 没用,因为这样您的产品就无法被 google 这样的搜索引擎编入索引。 每个产品都应该有自己的 url。 你可以使 "speaking urls" 像 /category/product 并用 url 重写来翻译它。 会话变量更好地用于登录数据等持久性事物。
I thought session variables were the preferred method for this type of thing
完全没有。虽然您可能有一个 "product.php" 页面 用于简化和重用代码,但您没有一个 "product" 资源。任何查看给定产品详细信息的请求都是对不同资源的请求。根据 HTTP 标准,该请求的 URL 应该不同,以便 URL 可以识别该资源。
在大多数情况下,最终看起来像这样:
product.php?id=123
因此,您可以想象任何独特的产品都会通过使用数字标识符来生产独特的 URL。然而,这不是唯一的方法。
I was trying to have a clean URL string
你还是可以的。有很多方法可以做到这一点。例如,许多现代 Web 框架可能能够从请求的格式中导出标识符 URL。所以你可以使用这样的东西:
products/123
这看起来更 RESTful 因为它将标识符维护为 URL 的一部分而不是附加到 URL 的值。此外,它使资源的 products
组件复数化,这更准确地表明一个人正在从一个集合(产品)中请求一个项目 (123)。
根据您使用的框架或工具,您也许还可以使用命名标识符。所以 URL 可能看起来像这样:
products/my-awesome-product
如果任何给定产品有一个唯一的上下文名称,而不是(或者可能除了)一个唯一的数字系统标识符,这就可以工作。
重点是,使用会话状态进行简单的资源导航绝对不是首选方法。正如您现在发现的那样,它很快就会成为一个问题。会话变量的使用引入了对服务器端状态的依赖。 HTTP 在设计上是无状态的。 GET 请求不暗示状态,请求本身应该携带所请求内容的信息。
I thought session variables were the preferred method for this type of thing and I was trying to have a clean URL string
切勿将 sessionVariables 用于此类问题!
使用会话变量可能会遇到问题的示例:
比方说,您的产品 url 看起来像:
www.abc.com/product/bmw-q7
并且此产品的 ID 是 73 保存在会话中,所以用户想为您的 url 添加书签?后来他点击了书签link,此时,新启动的会话中没有保存id。
所以首选方法是在 url:
中附加 idwww.abc.com/product/bmw-q7?id=73
或者如果您使用 htaccess-mode-rewrite 则更好:
www.abc.com/product/bmw-q7/73