小编Mor*_*lor的帖子

如何使用Reddit和Hacker News排名算法?

我最近一直在研究排名算法,特别是Reddit和Hacker News使用的算法.算法本身很简单,但我不太明白它们是如何使用的.

我可以做的一件事是直接在SQL中实现算法,这样每次用户访问显示排名帖子的页面时,这样的事情就会运行:

SELECT thing1, thing2 FROM table
ORDER BY ranking_algorithm DESC
LIMIT page*20, 20
Run Code Online (Sandbox Code Playgroud)

在SO上有几个类似的问题,但唯一的答案是将排名算法放在SQL查询中.然后线程死了......

将算法放在SQL查询中的规模较小,但如果网站有大量用户和大量帖子会怎么样?这意味着每次任何用户打开显示排名帖子的页面时,都会运行该查询.这不是非常有效.

现在,Reddit和Hacker News不会将他们的排名算法作为SQL查询运行,而是分别在python和ark中运行.那么它们究竟是如何以及何时使用的?

一种可能的解决方案是从每个帖子中获取所有相关信息,并将其存储在Web服务器上的某些数据结构中.然后对此数据结构进行排序和排序.

每当有人打开显示排名帖子的页面时,您只需转到数据结构,检索正确的帖子范围并显示它们.

然后每半小时左右,您从服务器检索最新信息,对其进行排名,排序并更新数据结构.

其他较便宜的查询,例如检索和显示特定帖子的所有信息,或显示最新帖子(而不是最佳得分)可以在每次打开相关页面时在SQL中完成.

优点是您的数据库每半小时才被命中(对于昂贵的排名查询).缺点是您需要复制大量数据库.

php mysql ranking

16
推荐指数
2
解决办法
4280
查看次数

如何正确使JSP会话无效?

所以这就是问题所在.当用户退出我的网站时,他们仍然可以点击后退按钮并继续使用该网站.为了跟踪用户是否登录,我创建了一个会话属性"isActive".用户登录时该属性设置为true,并且在注销时会话无效之前(冗余)删除该属性.同样在每个页面上,我都会检查属性是否存在.

我还指定不应在其head标签中缓存页面.

尽管如此,用户仍然能够回击浏览器,并继续使用该网站,就好像他们从未注销过一样.

有关如何解决此问题的任何想法?

这是代码:

登录Servlet:

...
session.setAttribute("isActive", true);
//Redirect to home page.
Run Code Online (Sandbox Code Playgroud)

检查登录的JSP:

<c:if test='${empty sessionScope.isActive || sessionScope.isActive != true}'>
     <c:redirect url="/index.jsp?message=Session Timed Out."/>
</c:if>
Run Code Online (Sandbox Code Playgroud)

注销Servlet:

request.getSession().removeAttribute("isActive");
request.getSession().invalidate();
response.sendRedirect("index.jsp");
Run Code Online (Sandbox Code Playgroud)

内部标记:

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="Sat, 01 Dec 2001 00:00:00 GMT">
Run Code Online (Sandbox Code Playgroud)

谢谢

java security session jsp invalidation

9
推荐指数
1
解决办法
2万
查看次数

在JSF中登录,注销和存储会话属性的最佳方式

我是JSF的新手,我对管理用户登录的最佳实践感到困惑.有许多答案浮出水面,但它们需要JSF和Java EE的知识,而我似乎并不知道.

使用经典JSP项目时,我以非常简单的方式处理登录.当用户成功登录时,会创建一个值为true的会话属性"isLoggedIn".当用户注销时,会话无效.如果"isLoggedIn"属性为false或缺失,则要求您登录的页面将重定向到登录屏幕.

如何在JSF中完成这类工作?我应该在HttpSession或托管会话bean中存储登录状态,用户名和用户角色等内容吗?

我发现很多答案都说你应该使用request.getRemoteUser()来管理登录,但是不做任何进一步的解释.根据我能够收集的内容,如果您使用域凭据登录应用程序,此方法很有用.如果我在数据库中存储用户凭据(用户名+ salted和哈希密码),那么它有用吗?

如果有人能告诉我如何使用以下两页的网站,那将非常有用:

  1. 一个登录页面,可以输入用户名和密码,然后按"登录"按钮.
  2. 包含"登录成功"消息的页面和注销按钮.按下注销按钮后,用户将注销并进入登录页面.

如果用户在未登录时尝试转到第二页,则会将其重定向到第一页.

就像我之前说过的,我是JSF的新手,我根本找不到一个如何处理这类事情的好教程.因此,任何您认为有用的链接将不胜感激.

如果重要,我正在使用MyFaces实现和PrimeFaces组件库.

session jsf login myfaces

2
推荐指数
1
解决办法
6935
查看次数

标签 统计

session ×2

invalidation ×1

java ×1

jsf ×1

jsp ×1

login ×1

myfaces ×1

mysql ×1

php ×1

ranking ×1

security ×1