2011-07-14 62 views
0

我正在尝试为我的网站实现“收藏夹”功能,并且想知道如何去存储这些数据。如果可能的话,我想做的事情是让用户喜欢的东西存储在数据库中 - 这样我就可以使用数据来个性化搜索结果。使用cookie和会话的“收藏夹”功能(PHP和CodeIgniter)

我也试图让它在非登录状态下的收藏夹到登录状态之间平滑过渡(允许用户匿名保存收藏夹,但如果登录传输/请求将它们转移到他的账户)

我怎么能够长时间存储这些数据?我目前正在使用数据库加密会话,并且正在考虑延长会话时间或将其设置为不过期。这可能会导致我的安全问题没有?

我会感激的帮助,

干杯。

+0

你是什么意思“......有用户最喜欢的东西......”?什么是“事物”?网页?分类?此外,您可能希望将此数据存储在数据库中,因为会话(即使设置为不过期)仍可能过期。不要相信Cookie来保存这类数据。另外,如果他们使用不同的计算机登录,是否还希望收藏夹仍然存在? – Matthew

回答

1

嗯,如果我明白了,你想要的是一个注册的用户可以设置“东西”的喜爱,因为这是一个M:N的关系(严格从一个数据库点),我会建议表存储这些关系,即假设你有一个用户和一个主题表时,SQL想与此类似:

create table favorite(user_id integer not null references user, topic_id integer not null references topic); 

至少,这是大多数DB书会告诉你这样做。如果你没有一个用户表(我假设你有一个你要标记为最爱的那个“东西”),你可以只存储分配给用户,只要他/她登录到系统的ID。希望能有所帮助。

1

从您的匿名会话中创建实际用户。在没有登录凭证的情况下将它们存储在数据库中,并将其与您的用户标识存储在一起的关联收藏夹或其他内容。如果他们注册他们明确自己的cookie之前,你只需要添加自己的登录/ profile文件到现有的用户ID,他们已经创造了所有的收藏都已经在正确的位置。一个用于登录和注销用户的系统,而不是两个。