# Prüfen ob Webseite in mehreren Fenstern / Tabs geöffnet ist



## ThiKool (13. Oktober 2015)

Hallo Leute,

ich programmiere derzeit ein Tool, welches nicht paralell mit dem selben User unter verschieden Fenstern / Tabs des selben oder eines anderen Browsers aufgerufen werden darf.

http://web.whatsapp.com macht das z.B. genau so wie ich mir das vorstelle.

Mit den verschiedenen Browsern ists ja nicht so kompliziert, aber wie verhält sich das mit verschiedenen Tabs / Fenstern auf dem selben Computer mit selben Browser?

Leider habe ich aktuell keinen Ansazu im Netz dazu gefunden - vielleicht könnt ihr mir auf die Sprünge helfen?

Danke euch


----------



## Alice (13. Oktober 2015)

100% wirst Du das nicht unterbinden können.

Die "User" sind nicht registriert? Vielleicht lässt sich da was mit Sessions basteln... als Ansatz.


----------



## ThiKool (13. Oktober 2015)

Hi, doch die User sind registriert, aber wie prüfe ich auf verschiedene Fenster / Tabs?


----------



## Alice (13. Oktober 2015)

Möchtest Du mehrere Fenster/Tabs unterbinden?


----------



## ThiKool (13. Oktober 2015)

Nein:
Wenn der User mein Tool gleichzeitig in zwei Fenster / Tabs geöffnet hat, soll es nur in einem Tab laufen, im anderen Tab erscheint eine Fehlermeldung "Die Anwendung läuft bereits in einem anderen Browserfenster"


----------



## Alice (13. Oktober 2015)

https://sites.google.com/site/sarittechworld/track-client-windows

Als Ansatz.

PS: Keine Ahnung ob ich schon zu Müde bin, aber mit einer Session lässt sich das doch realisieren.


----------



## ThiKool (13. Oktober 2015)

Ok deinen Link muss ich mir mal genau ansehen.

Bei Sessions wüsste ich nicht das man dort einen Unterschied bemerkt wenn der selbe user den selben Link im selben Browser auf dem selben PC in einem anderen Tab öffnet - das wäre natürlich super, wenn sich das feststellen liese


----------



## Alice (13. Oktober 2015)

Quick and dirty... Als Ansatz.

```
session_start();

if (session_is_registered('lookinguser'))
{
  if ($_SESSION['lookinguser'] == 'on')
  {
     $ausgabe = 'Das Tool läuft schon...'; // oder echo, array...
  }
}
  else
{
  $_SESSION['lookinguser'] = 'on';
}
```

Dann mit JS oder so... immer wieder prüfen.


----------



## ThiKool (13. Oktober 2015)

Hmm aber wenn der User im optimalfall nur ein Tab offen hat und die Seite wechselt oder neu läd enthält die Session ja schon "on" und würde zur Fehlermeldung führen?!


----------



## Alice (13. Oktober 2015)

Google mal nach "PHP Session Timeout"...

Du musst es nicht unbedingt mit Session machen. Es würde auch z.B. mit der Datenbank funktionieren.

User loggt sich ein und drückt z.B. auf "Spielen"... Nun wird in der DB "ThiKool" auf "is playing" mit einem Timestamp gesetzt. Dieser Eintrag "is playing" wird alle X Sekunden/Minuten erneuert. Mit einem weiteren Skript (z.B. PHP) gehtst Du die DB nach durch, der Einträge sucht die älter als X Sekunden/Minuten ist. Alles was z.B. älter als 1 Minute ist, wird gelöscht oder auf "is offline" gesetzt.

Wie stark ist der Server? Wieviele "Spieler spielen" (bzw. benutzen das Tool) gleichzeitig? Es gibt viele Möglichkeiten...


----------



## Alice (13. Oktober 2015)

Hier aich etwas interessantes:

http://serkanyersen.github.io/ifvisible.js/

Demo: http://serkanyersen.github.io/ifvisible.js/demo.html


----------



## ThiKool (13. Oktober 2015)

Also entweder habe ich einen Denkfehler oder wir reden aneinander vorbei  Vielen Dank aber schonmal für die Links.

Ich mein stellen wir unsmal vor vor die Session wird gesetzt oder der DB Eintrag und der User läd die Seite neu im selben Browser und Fenster - was passiert? Er bekommt die Fehlermeldung da er schon als is using gesetzt ist oder sehe ich das falsch? Man müsste doch mitspeichern von welchem Browser und eben von welchen Tab der Request kommt und da weiß ich nicht wie ich ansetzten soll bei den Tabs.


----------



## Alice (13. Oktober 2015)

Erklär mir doch erst einmal mal kurz um was für ein "Tool" es geht? Spiel? Canvas?


----------



## ThiKool (13. Oktober 2015)

Es ist eine durch einen userspezifischen Login geschütze php Anwendung wo der User durchaus die Möglichkeit haben sollte Seiten zu wechseln, aber eben nur immer in einem Tab. Sobald er den aktuellen Link aus der Statusleiste in ein zweites Tab parallel kopiert soll im zweiten Tab die Fehlermeldung erscheinen. Ist nur ein Tab offen soll die Seite ganz normal bedienbar sein.

Vielen Dank für deine Mühe


----------



## Alice (13. Oktober 2015)

Es ist also nicht eine "spezielle Seite" wie z.B. game.php sondern mehrere wie z.B. in einem Admin-Bereich mit diversen Unterseiten usw.?

Wie sind die Links aufgebaut?

cms.php
cms.html
cms.php?cont=1
...?


----------



## ThiKool (13. Oktober 2015)

Genau


----------



## sheel (13. Oktober 2015)

Wofür soll so eine Sperre eigentlich gut sein?
Dem User sein gewohntes UI kaputt zu machen ist praktisch nie sinnvoll.

Was willst du damit erreichen?
Vielleicht gibt es ja einen ganz anderen Weg, den du übersehen hast.


----------



## Alice (13. Oktober 2015)

Bei einem "Browsergame" könnte ich es ja durchaus nachvollziehen... je nach "Spielart" könnte man "cheaten".


----------



## ThiKool (13. Oktober 2015)

Es soll ein Chatsystem enthalten daher gefällt mir auch der Ansatz von web.whatsapp so gut, wobei die halt eben keinen Seitenwechsel habe und daran scheitert es wohl.


----------



## sheel (13. Oktober 2015)

Falls das uns den Grund mitteilen sollte, ich verstehs leider nicht,
zB. weil ich noch nie Whatsapp verwendet habe.

Bei bekannten Chats sehe ich kein Problem, das eine Sperre rechtfertigt. Wenn der
User gern mehrere Tabs hat, also sich die empfangenen Nachrichten usw. mehrfach
anzeigen lassen will, warum nicht? Schadet ja keinem.


----------



## ThiKool (13. Oktober 2015)

Hmm ja aber ist es technisch dennoch irgendwie möglich das zu unterbinden?


----------



## Alice (13. Oktober 2015)

Du hast also a) einen Chat und b) andere Seiten und alle Seiten insgesamt sollen gleichzeitig nur einmal aufgerufen werden können pro User?


----------



## ThiKool (13. Oktober 2015)

Genau so ist es


----------



## ThiKool (13. Oktober 2015)

Ich glaub ich habs: 
sessionStorage

ist das Mittel zum Ziel, wenn ich jetzt nicht schon zu müde bin und etwas übersehen habe.

Vielen Dank aber auf jeden Fall für euere Mühe


----------

