2009-05-25 67 views
2

我必须生成一个网站上的物品列表,这些物品的列表对于该特定物品列表的用户会话是随机的。在随机物品数据集上寻呼

我将添加一个链接来演示问题。 WebSite Link

场景: 当用户进来并点击链接时,页面上的项目应该随机化。当用户点击第二页,第三页时,它应该遵循它第一次生成的相同的随机模式,以便当我回到第一页时,该页上的项目将与当用户第一次点击链接。

我的确想过把所有项目的数据集都随机化一次并保留在会话中,但这是最后的手段。

回答

1

1)您的随机数发生器必须是可重复的:通过为每个用户使用唯一的种子并使用Random()类,可以跨多个HTTP请求生成相同的随机数序列 。但是,您必须将种子存储在某处(我会建议一个cookie或隐藏的输入元素)。

public Random GetGenerator() { 
DateTime now = new DateTime(); 
long ticks = now.Ticks(); 

if(getCookie("ticks") > 0) { 
// existing user: 
ticks = getCookie("ticks"); // you must implement this to get the user's seed 
} else { 
// new user: 
setCookie(now.Ticks()); // you must implement this to set a Cookie/input field value 
} 

return new Random(ticks); 
} 

2)您必须生成M *(N-1)数字以最终得到页面N的随机数,其中M是每页的项目数。只有这样你才能开始为请求的页面生成随机数字。

+0

我试过这种技术。我做了和你写的一样的东西。现在发生的是它在我的机器上正常工作。它生成一组具有给定种子的随机数。 当我把它放在QA服务器上时,它会为给定的种子返回不同的值,这在技术上不应该这样做。 任何想法? – sajidnizami 2009-05-25 07:51:24