私は、JSF/Primefaceサイト用のシンプルなログインシステムを、sessionMapを使用して構築しました。私のメインビュー、私が持っているSessionScoped BeanですParliamentManagerで:JSF複数のユーザーがViewExpiredExceptionを引き起こす
RequestScoped ManagedBeanである私のログインビューで@PostConstruct
public void postInit() {
logger.log(Level.INFO,"Session started");
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
Map<String, Object> sessionMap = externalContext.getSessionMap();
user = (User) sessionMap.get("user");
logger.log(Level.INFO, "user trader is: {0}",
new Object[]{user.getTrader().getTraderId().toString()});
userId = user.getUserId();
私が持っている:私のログインページで
public void login(ActionEvent event) {
RequestContext requestContext = RequestContext.getCurrentInstance();
FacesContext context = FacesContext.getCurrentInstance();
boolean loggedIn = false;
User user = request.findUser(username);
if(user.getPassword().equals(this.getPassword()))
{
loggedIn = true;
context.getExternalContext().invalidateSession();
context.getExternalContext().getSession(true);
context.getExternalContext().getSessionMap().put("user", user);
logger.log(Level.INFO, "put user {0}",
new Object[]{user.getUserId()});
logger.log(Level.INFO, "session id {0}",
new Object[]{context.getExternalContext().getSessionId(false)});
requestContext.addCallbackParam("loggedIn", loggedIn);
}
}
を私は単純にメインにリダイレクトインデックスページは:私は2人のユーザーが持っている場合
<script type="text/javascript">
function handleLoginRequest(xhr, status, args) {
if(args.validationFailed || !args.loggedIn) {
PF('dlg').jq.effect("shake", {times:5}, 100);
}
else {
PF('dlg').hide();
$('#loginLink').fadeOut();
window.location = "http://localhost:8080/mysite/index.xhtml"
}
}
これは、LO OK作品(ブラウザセッションでは1つ、シークレットセッションでは別のセッション)。しかし、3番目のユーザー(別のインゴジットセッション)を追加すると、フォーム内に自分のajaxリクエストを送信するときにViewExpiredExceptionが発生します。私は多くのユーザーがいると思うので、大量のセッションができると思ったので、なぜこのような状況で例外が発生するのか分かりません。私はユーザーとセッションを間違って関連付けるのですか、または例外の原因となる他の問題がありますか?
おかげで、Chromeの場合 Zobbo
は、Chromeの一つまたはFirefoxでのようなものを二つの異なる "お忍び" はありますか?または同じブラウザでシークレットブラウザを使用していますか? –
こんにちはホルヘ。それらはすべて同じブラウザ(Chrome)にあります。そのため、1つの「通常の」タブ、新しいシークレットウィンドウと別のシークレットウィンドウが表示されます。ありがとう。 – zobbo
Chromeは残念ながら、シークレットインスタンス間でセッションを共有しています。これを行うにはFirefoxを使用してください。 –