diff --git a/Twidder (Lab3)/__pycache__/database_helper.cpython-310.pyc b/Twidder (Lab3)/__pycache__/database_helper.cpython-310.pyc
index a589a1c66f72efe21dc63cfcf42da73d2da85dd5..7e35810d1e1129c923a339515a845bc52bbdcae7 100644
Binary files a/Twidder (Lab3)/__pycache__/database_helper.cpython-310.pyc and b/Twidder (Lab3)/__pycache__/database_helper.cpython-310.pyc differ
diff --git a/Twidder (Lab3)/database.db b/Twidder (Lab3)/database.db
index 4213d44eb0fac01c7a52ea7879431312ace92b86..e782f056d664cc752ac1faf34ef066c94f2b9145 100644
Binary files a/Twidder (Lab3)/database.db and b/Twidder (Lab3)/database.db differ
diff --git a/Twidder (Lab3)/database_helper.py b/Twidder (Lab3)/database_helper.py
index 7eac6bdaa35947e244602a2cb9c9123debbb5fb2..877fefc84d1668faa95c898848537f2aa908a685 100644
--- a/Twidder (Lab3)/database_helper.py	
+++ b/Twidder (Lab3)/database_helper.py	
@@ -31,11 +31,34 @@ def authenticate(email, password):
         return False
 
 
-def addToLoggedInUsers(token, email):
+"""def addToLoggedInUsers(token, email):
     try:
         get_db().execute("INSERT into LOGGEDINUSERS values(?, ?)", [token, email])
         get_db().commit()
         return True
+    except:
+        return False"""
+        
+def addToLoggedInUsers(token, email):
+    try:
+        db = get_db()
+        cursor = db.cursor()
+        
+        # Check if the email already exists in the table
+        cursor.execute("SELECT * FROM LOGGEDINUSERS WHERE EMAIL=?", (email,))
+        result = cursor.fetchone()
+        
+        if result is None:
+            print("First time putting user in LOGGEDINUSERS")
+            # If the email is not already in the table, insert a new row
+            cursor.execute("INSERT INTO LOGGEDINUSERS (TOKEN, EMAIL) VALUES (?, ?)", (token, email))
+        else:
+            print("Second time putting user in LOGGEDINUSERS")
+            # If the email already exists in the table, update the corresponding token
+            cursor.execute("UPDATE LOGGEDINUSERS SET TOKEN=? WHERE EMAIL=?", (token, email))
+        
+        db.commit()
+        return True
     except:
         return False
 
diff --git a/Twidder (Lab3)/server.py b/Twidder (Lab3)/server.py
index 3e61cae6dbd502afb197b65297b507a4cba9b49c..8b4cafc5917e95901e04e1a51e7c672a98d583e6 100644
--- a/Twidder (Lab3)/server.py	
+++ b/Twidder (Lab3)/server.py	
@@ -1,5 +1,5 @@
 from flask import Flask, request, jsonify
-from flask_sockets import Sockets
+from flask_sock import Sock
 
 import waitress
 import database_helper
@@ -8,15 +8,27 @@ import string
 import json
 import re
 
-app = Flask(__name__)
-sockets = Sockets(app)
+app = Flask(__name__, template_folder='static')
+sockets = Sock(app)
 
-@sockets.route('/echo')
-def echo_socket(ws):
+        
+@sockets.route('/echo_connection')
+def echo_connection_socket(ws):
     while True:
-        message = ws.receive()
-        print("message : ", message)
-        # ws.send(message)
+        token = ws.receive()
+        email = database_helper.tokenToEmail(token)
+        if email:
+            if email in loggedIn_for_ws:
+                old_ws = loggedIn_for_ws[email]
+                old_ws.send("Disconnect")
+                old_ws.close()
+                print(email, "first connection disconnected")
+                loggedIn_for_ws[email] = ws
+            else:
+                loggedIn_for_ws[email] = ws
+        else:
+            print("email error")
+
 
 @app.route("/", methods = ['GET'])
 def hello_world():
@@ -62,6 +74,7 @@ def sign_in():
             value = {
                 "token" : token
             }
+            print("token : ", token)
             if database_helper.addToLoggedInUsers(token, data['email']):
                 return jsonify(value), 201
             else:
@@ -233,7 +246,8 @@ def is_valid_email(email):
 
 
 if __name__ == '__main__':
+    # waitress.serve(app, host='0.0.0.0', port=5000, threads=4)  #http://localhost:5000
+    loggedIn_for_ws = {}
     app.debug = True
-    #waitress.serve(app, host='0.0.0.0', port=5000, threads=4)  #http://localhost:5000
     app.run()
 
diff --git a/Twidder (Lab3)/static/client.html b/Twidder (Lab3)/static/client.html
index 6ef54ed3680e60f6b2338a81e7135ebd5ad398e6..21b2419aed3343b33072ec9ad5b6f3ee70c038a4 100644
--- a/Twidder (Lab3)/static/client.html	
+++ b/Twidder (Lab3)/static/client.html	
@@ -6,6 +6,7 @@
         <link href="/static/client.css" type="text/css" rel="stylesheet">
         <script src="/static/client.js"></script>
         <script src="/static/serverstub.js"></script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.5.0/socket.io.js"></script>
         <script id="welcomeview" type="text/view">
             <div id="center">
                 <img src="/static/wimage.png">
diff --git a/Twidder (Lab3)/static/client.js b/Twidder (Lab3)/static/client.js
index 180f6a456e0e55b3bc8acd24a5dc75f85e3bf635..89997231b97281f5b94626ba342543f739de4170 100644
--- a/Twidder (Lab3)/static/client.js	
+++ b/Twidder (Lab3)/static/client.js	
@@ -23,15 +23,36 @@ window.onload = function() {
 //---------------------------------------WELCOME & PROFIL---------------------------------------
 
 function displayWelcomeView() {
-  var ws = new WebSocket("ws://localhost:5000/echo")
-  ws.onopen = function(event) {
-    console.log("Connexion WebSocket établie !");
-    ws.send("Hello, server!");
-  };
   document.getElementById("displaywelcome").innerHTML = document.getElementById("welcomeview").innerHTML;
 }
 
 function displayProfilView() {
+  let ws = new WebSocket('ws://' + window.location.host + '/echo_connection')
+  ws.onopen = function(event) {
+    console.log("WebSocket connection established !");
+    ws.send(localStorage.getItem("token"));
+  };
+  ws.onmessage = (event) => {
+  if (event.data == "Disconnect"){
+    console.log("Disconnection")
+    displayWelcomeView();
+    localStorage.removeItem("tab");
+    localStorage.removeItem("token");
+    localStorage.removeItem("browsed_email");
+    localStorage.removeItem("email_username");
+    localStorage.removeItem("refreshToken");
+    localStorage.removeItem("refreshToken2");
+    localStorage.removeItem("reloadHome");
+    localStorage.removeItem("reloadBrowsed");
+    localStorage.removeItem("browse_success");
+    document.getElementById("displayprofil").innerHTML = "";
+    document.getElementById("displaywelcome").innerHTML = document.getElementById("welcomeview").innerHTML;
+    document.body.style.backgroundColor = "#0F98B7";
+    }
+  }
+  ws.onclose = function() {
+    console.log('WebSocket disconnected');
+  };
   document.getElementById("displayprofil").innerHTML = document.getElementById("profilview").innerHTML;
   document.getElementById("displaywelcome").innerHTML = "";
   document.body.style.backgroundColor = "#fcd29f";
@@ -468,3 +489,13 @@ function fills_data(tab, data_user) {
   document.getElementById(tab + "_city").innerHTML = "City = " + data_user.data.city;
   document.getElementById(tab + "_gender").innerHTML = "Gender = " + data_user.data.gender;
 }
+
+
+
+//---------------------------------------WEBSOCKET---------------------------------------
+
+/*let ws = new WebSocket('ws://' + window.location.host + '/echo_connection')
+
+ws.onmessage = (event) => {
+  console.log("event.data : ", event.data);
+}*/
\ No newline at end of file