今天面试php遇到几个问题不会,请大家帮我看看1.网站服务器想判断某个用户在网上的行为记录以及下次该用户
今天面试php遇到几个问题不会,请大家帮我看看
1.网站服务器想判断某个用户在网上的行为记录以及下次该用户再次登陆的时候就能判断出是上次登陆的用户,这个是用cookie来判断好,还是用session好? 为什么? 还有一个问题,服务器如何判断某个行为是A用户的还是B用户的行为。(对cookie和session网上虽然有很多解释,但我一直没有100%搞明白这个问题,估计下次面试也会遇到,该怎么理解呢?)
2.某个账号登陆之后如何防止这个账号在其他地方再次登陆,就比如QQ的某个账号登陆了,但在其他地方想再用这个账号登陆,php是如何判断并且阻止的?
3.某个表里的数据起初很少,但是因为业务的关系,数据量猛增(几千万条或者更多),这时该怎么设计这个表,该如何优化?
[解决办法]
1.cookie好。用Session挂在服务器上匹配数据。相当于查数据库了
2。可以在数据库里设置字段 is_login 登陆判断为1 未登陆为0 如果已经为1 再次登陆就判断已经登陆
3.只想到索引。这个是必须的
新手言论。勿喷
[解决办法]
楼主问题目前没有统一答案。
1。大网站用cookie,安全性用session. 虽然session也可以设有效期,但对于有效期的问题,一般更喜欢用cookie.
服务器如何判断某个行为是A用户的还是B用户. 这个是身份识别。可以从cookie或session中取,或生成user对象。
2.这个无法解决。只能是设数据库标识。is_login 登陆判断为1 。 但问题在于,何时清除这个标识。---》高手解答。
3. 简单地就是索引,但索引也没有效率时。可以分表和分区。 具体的只有看你查询需求,测试后才知道。
[解决办法]
1.cookie 最好的方式还是 cookie+session 至于区别之类的 你还是得仔细的看看一些教程,很多就不重复在这粘贴了。
2.使用memchace+mysql来解决,轻松easy...
3.很笼统....这个有很多情况发生 所以 我觉得还是要根据实际的情况来处理.
例如我们可以先观察 mysql-slow.log ...
数据量很多的时候第一个考虑的可能就是分表了...
[解决办法]
面试啊....这么回答:
才几千万啊,我上个公司那里几亿都没当回事.....你们公司的DBA不行......
[解决办法]
[解决办法][解决办法]应该是memcache过期时间设置来清除mysql中的is_login信息,再通过一些onbeforeunload之类的辅助吧。
[解决办法][解决办法]【3.某个表里的数据起初很少,但是因为业务的关系,数据量猛增(几千万条或者更多),这时该怎么设计这个表,该如何优化?】
你就说有什么关系啊,就一张表,csdn 600万的纪录都在一张表里,被导出了
[解决办法]我也想知道第二个问题的答案,因为非人为正常点击退出(比如关闭浏览器、非正常关机)这种情况发生的时候,如果用is_login这种方式来判断的话,就会失效。如果是定期清除的话,也会有问题,就是出现非正常退出的时候由于没有及时处理is_login导致登陆不上
[解决办法]第二个问题和统计在线人数是同一个道理
[解决办法]第二個问题 可能更多的是用到 socket.io
做可能会更好一点.及时判断.
因为php不能很精确的确定是否在线.
还有一种方案就是php方案
设置这个在线用户多少分钟内没有做操作,我就判定他已经退出.(每次点击一个事件就是一次更新 online_time)
而且如果有后来者登录的话,你不是去阻止,而是让他登录上去,然后提示之前登录的账户 你的账户在其他地方登录了.
第一个问题呢:个人建议还是偏向session 比较安全.
第三个问题就是:如果应许的话重新设计表...或许这是更好的方法.
如果不行的话.最好是看具体情况...不过考你应该是优化和分表.
[解决办法]关于第二个问题,是不是可以理解为单点登录呢?
[解决办法][解决办法]十几年来,这种问题始终都会被问及,其实并没有标准答案,只是查看你的知识面有多宽
1.网站服务器想判断某个用户在网上的行为记录以及下次该用户再次登陆的时候就能判断出是上次登陆的用户,这个是用cookie来判断好,还是用session好? 为什么? 还有一个问题,服务器如何判断某个行为是A用户的还是B用户的行为。(对cookie和session网上虽然有很多解释,但我一直没有100%搞明白这个问题,估计下次面试也会遇到,该怎么理解呢?)
判断是否有上次登录,需用 cookie(指定失效期的),不能用 session 因为 session 只作用于当前
2.某个账号登陆之后如何防止这个账号在其他地方再次登陆,就比如QQ的某个账号登陆了,但在其他地方想再用这个账号登陆,php是如何判断并且阻止的?
需要维护一张用户登录情况表,每当有用户登录时,先检查该用户是否在表中。然后做相应处理
3.某个表里的数据起初很少,但是因为业务的关系,数据量猛增(几千万条或者更多),这时该怎么设计这个表,该如何优化?
如在几年前,只回答分表就可以了,现在还应加上分区
[解决办法]怎么区分之前和之后的用户?
看来,这还是和泄露门有关。 异地登录通知的问题? 也算这个问题的一部分吧!
你可以去区分的啊.当前登录的账户有一个登录信息, 有一个当前的操作时间.(存放数据库)
然后他每次请求页面的时候 你都更新那个操作时间..然后你就可以根据登录状态,和最近的操作时间进行判断
[解决办法][解决办法]第一个问题我答错...
最佳方案是用cookie...我以为是存储用户登录信息.
没有看清是浏览器记录会员登录信息.
[解决办法]1.网站服务器想判断某个用户在网上的行为记录以及下次该用户再次登陆的时候就能判断出是上次登陆的用户,这个是用cookie来判断好,还是用session好?
---------------------------
用cookies。
session是针对浏览器进程生效的,而且占用服务器资源。只要一关掉浏览器session信息就没了,不能满足记录用户登录的目的。
cookies保存在用户端的浏览器上,而且可以设置有效时间,能满足使用要求。
2.某个账号登陆之后如何防止这个账号在其他地方再次登陆,就比如QQ的某个账号登陆了,但在其他地方想再用这个账号登陆,php是如何判断并且阻止的?
---------------------------
根据我的经验,这个问题应该是:如何让用户在同一时间只能登录一次?即:他在A点登录以后,在B点再次登录,会导致A点登录的退出。楼上有个兄弟说单点登录,我不知道是不是这个意思。
这个通常的处理办法是这样,用户登录时随机生成一个hash值,保存在数据库用户表里面,同时也保存在浏览器cookies里面。每次用户访问,都验证用户表里面的hash值和cookies值是否相等,不等则退出。
这样就可以保证用户同一个时间只能登录一次。
3.某个表里的数据起初很少,但是因为业务的关系,数据量猛增(几千万条或者更多),这时该怎么设计这个表,该如何优化?
---------------------------
如果数据表里面有大字段,那么另外建索引表。平时只读索引表,有需要才读数据表。
如果没有大字段,那么按照id索引继续分表,不同id范围的数据,保存在不同的数据表里面。
标准答案,楼主给分。
[解决办法]