我已经使用PHP在大学项目上创建了一个购物车,我可以添加到项目中的链接到购物车,这将更新我的数据库中的购物车表,然后打印出来。
我希望能够在用户退出页面或关闭浏览器后删除表格中的eveything(我认为这是会话ID更改的时候)。但我不能想到这样做的逻辑?
欢呼声
答案 0 :(得分:1)
通常这样做是为了跟踪用户的上一次活动。
每次任何用户打开页面时,都会在数据库中检查所有已记录用户的last_log
条目。如果一个用户上次执行某项操作的时间超过N分钟,则该会话将过期。然后,您可以将用户注销并删除其项目。
您可能会提出这样的问题:"如果当前没有用户打开网页会怎样?没有人可以触发代码的执行"。在这种情况下,也没有人有兴趣知道任何购物车的内容,桌子可以保持填充。要解决此问题,使用此解决方案,您可能需要在服务器上运行计划任务。
以下是步骤摘要:
...
Retrieve the list of expired sessions since the last check
For every expired session
Remove the items from the shopping cart
Update the last_log entry for the current user
...
检查所有用户听起来像是一项昂贵的操作,但你必须考虑以下几点:
SELECT
找到要注销的人(如果需要)和一个UDPATE
来注销以下是一个示例SQL(没有特定语言):
-- Used to check which user session have expired since the last check
SELECT username FROM session_table WHERE last_log < SUBTRACT(DATE(), 30 MINTUES) AND logged = 'true';
-- Used to log out the users after the timeout
UPDATE session_table SET logged = 'false' WHERE last_log < SUBTRACT(DATE(), 30 MINTUES) AND logged = 'true';
-- Used to update the last_log entry for the current user
UPDATE session_table SET last_log = DATE() WHERE user_id = "...";
您可以使用Cookie或会话执行此操作,但我更喜欢数据库,因为它可以避免处理PHP会话跟踪并允许您执行更复杂的操作,例如,如果您希望保留&#34;后&#34;或&#34;草稿&#34;项目清单。
更新:我对logid和DB / SQL部分做了一些澄清。
答案 1 :(得分:0)
你可以&#34;清除&#34;你的桌子使用一些时间逻辑。
例如,当您的用户返回您的页面时(您可以使用$ _SESSION,$ _COOKIE,$ REMOTE_ADDRESS等进行验证),如果该用户返回第二个&#39;视图是在,也许是2天后,您可以清除&#39;那些数据。或者,您可以创建一份“工作”。在您的数据库中,检查用户上次访问您的网页的时间(列&#39; last_login&#39;),然后再次删除该用户添加的卡内的任何产品。
答案 2 :(得分:0)
当用户关闭浏览器时,您可以使用JavaScript向服务器发送AJAX请求,您可以使用Javascript事件&#34; onBeforeUnload&#34; 进行检查。这样,脚本将确保仅在用户离开网站时删除会话和数据库记录。
<script type="text/javascript">
$(window).on('beforeunload', function() {
$.ajax({
url: /yourfileDeleteSession.php
});
});
</script>