Domino 9 und frühere Versionen > ND6: Entwicklung
Cookies
FRANKI:
Hallo Leute,
über die Suche habe ich nichts Passendes gefunden.....
Wenn ich meine Datenbank über das WEB starte und mich authentifiziere, wird ein Cookie gesetzt.
Die Laufzeit diese Cookies wird über den Server bestimmt.
Das ist heir bei uns 20 Minuten.
Jetzt möchte ich aber in einer spezielle Datenbank in einer Maske einen Button
einbauen, der diese Zeit verlängert.
Also so in der Art: "Möchten Sie immer angemeldet bleigen, dann clickern Sie bitte hier"
Kenn jemand da eine Möglichkeit??
Danke
Gruß
FRANKI
stitze:
Du kannst über Java Script darauf zugreifen, hier ein Beispiel aus der Notes Hilfe
--- Code: ---This servlet gets a token for Single Sign-on from the LtpaToken cookie through HttpServletRequest and creates a session based on the token.
import java.lang.*;
import java.lang.reflect.*;
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import lotus.domino.*;
public class Cookies extends HttpServlet
{
private void respond(HttpServletResponse response, String entity)
throws IOException
{
response.setContentType("text/plain");
if (entity == null)
{ response.setContentLength(0);}
else
{
response.setContentLength(entity.length() + 1);
ServletOutputStream out = response.getOutputStream();
out.println(entity);
}
}
public void doGet (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
String s1 = "";
Cookie[] cookies = null;
String sessionToken = null;
try
{
cookies = request.getCookies();
}
catch (Exception e)
{
respond(response,"Exception from request.getCookies(): " +
e.toString());
return;
}
if (cookies == null)
{
s1 = "No cookies received";
}
else
{
for (int i = 0; i < cookies.length; i++)
{
if (cookies[i].getName().equals("LtpaToken"))
{
sessionToken = cookies[i].getValue();
}
}
}
if (sessionToken != null)
{
try
{
NotesThread.sinitThread();
Session session = NotesFactory.createSession(null, sessionToken);
s1 += "\n" + "Server: " + session.getServerName();
s1 += "\n" + "IsOnServer: " + session.isOnServer();
s1 += "\n" + "CommonUserName: " + session.getCommonUserName();
s1 += "\n" + "UserName: " + session.getUserName();
s1 += "\n" + "NotesVersion: " + session.getNotesVersion();
s1 += "\n" + "Platform: " + session.getPlatform();
NotesThread.stermThread();
}
catch (NotesException e)
{
s1 += "\n" + e.id + e.text;
e.printStackTrace();
}
}
respond(response,s1);
}
}
--- Ende Code ---
Sry das Beispiel ist vieleicht besser:
--- Code: ---cookieName = "Cookie_Man";
function doCookie() {
var index = -1;
if(document.cookie) {
index = document.cookie.indexOf(cookieName);
}
if (index == -1) {
document.cookie = cookieName +
"=1; expires=Saturday, 03-Apr-2010 08:00:00 GMT";
} else {
var countbegin = (document.cookie.indexOf("=", index) + 1);
var countend = document.cookie.indexOf(";", index);
if (countend == -1) {
countend = document.cookie.length
}
var count = eval(document.cookie.substring(countbegin, countend)) + 1;
document.cookie=cookieName+"="+count+"; expires=Saturday, 03-Apr-2010 08:00:00 GMT";
}
}
--- Ende Code ---
FRANKI:
Hi stitze,
danke für die Info's.
Hab da mal ein wenig getestet.
Damit kann ich aber mein Problem nicht in den Griff bekommen.
Der Server setzt ein Cookie mit dem Namen "DomAuthSessId".
Das kann ich nicht überschreiben.
Und wenn das abgelaufen ist, dann bin ich auch abgemeldet.
Hat noch jemand einen Tip für mich??
Danke
Gruß
FRANKI
datenbanken24:
Der "DomAuthSessId", den Domino setzt, ist ein sogenannter Session cookie,
der nur im Arbeitsspeicher des Webclients gehalten wird.
Ein Session cookie zeichnet sich gerade dadurch aus, dass er KEIN Ablaufdatum bzw. Verfallsdatum hat.
Die Zeitspanne, die Du im Server einstellst, ist die Zeit, wann Domino die Domino-Usersession automatisch beendet, falls in dieser Zeitspanne keinerlei Aktionen dieses Users eingehen und hat mit dem Cookie auf dem Client nicht direkt was zu tun. (Sobald eine Aktion vom Client gegen den Webserver läuft beginnt die Zeitspanne neu.)
Der User-Session cookie ist bei einer automatischen Beendigung durch Domino dann für Domino nicht mehr gültig, auch wenn dieser möglicherweise noch im Client-Arbeitsspeicher vorliegt.
Aus dieser Überlegung / Basis heraus ist Dein Vorhaben, die Verfallszeit des "DomAuthSessId" browserseitig zu ändern, also ziemlich unmöglich, weil er keine hat.
Gruß,
Uwe
flaite:
... um an Uwes interessante Ausführungen noch etwas dranzuhängen:
Der Trick ist, dass für den Wert des Cookies serverseitig Ressourcen gehalten werden.
Der Server hat eine ganz große - sagen wir Tabelle - (dh. ähnlich wie LotusScript List oder Java HashMap), in der den Werten von den gerade aktiven Session-Cookies userobjekte zugeordnet sind.
Dh. der Notes Server liest den Session Cookie aus, schaut in die "Tabelle" und weiss, dass dieses oder jenes Userobjekt an den Wert des Cookies gebunden ist.
Diese Userobjekte auf dem Server werden nach der eingestellten Zeit entfernt. Der User hat zwar noch den Wert in seinem Cookie, aber die Tabelle aller userobjekte auf dem Server hat für diesen Wert kein Objekt mehr, weil dieses entsorgt wurde (sonst sammeln sich da auch immer mehr Objekte an).
So ähnlich funktionieren alle SessionCookies in allen Webumgebungen.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln