1 Востаннє редагувалося VTrim (29.12.2014 21:26:40)

Тема: Відправка webstorage в PHP

В продовження теми http://replace.org.ua/topic/3611/
Оскільки ці дані (на відміну від cookies) самі не відправляються на сервер,вирішив показати як це зробити через AJAX (в чистому JS,не бачу сенсу підключати jQ) запит. Може комусь знадобиться..

<script>

if(typeof(Storage) !== "undefined") //якщо технологія підтримується
{
localStorage.setItem("login", "VTrim"); //встановлюємо значення параметру login
localStorage.setItem("password", "qwerty1234"); //встановлюємо значення параметру password
} 
else 
{
document.write("Технологія не підтримується,оновіть браузер"); //помилка
}

  function AJAX() {
//кроссбраузерний
    var Connect;
    try {
      Connect = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
      Connect = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      Connect = false;
    }
    }
    if (!Connect && typeof XMLHttpRequest!="undefined") {
      Connect = new XMLHttpRequest();
    }
    return Connect;
  }

    var login  = localStorage.getItem("login"); //зчитуємо значення параметру login
    var password = localStorage.getItem("password"); //зчитуємо значення параметру password

    var PHP = AJAX(); // створюємо підключення
    PHP.open("POST", "/server/", true); //з'єднуємось
    PHP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); // Відправляємо кодування
    PHP.send("login="+encodeURIComponent(login)+"&password="+encodeURIComponent(password)); // Відправляємо POST запит
    PHP.onreadystatechange = function() { //очікування відповіді

      if (PHP.readyState == 4) //остання перевірка
      {
         if(PHP.status == 200) //отримали відповідь
         {
          document.write("Відповідь сервера: " + PHP.responseText); //результат
         }
      }
    };

</script>

Далі створіть папку server та створіть в ній файл index.php,в який помістіть наступне..
Тут найпростіший приклад.

<?php  
       if($_POST['login'] && $_POST['password']): //якщо є  POST запити login i password

       echo 'Логін - <b>'.$_POST['login'].'</b> Пароль - <b>'.$_POST['password'].'</b>'; //то виводимо їх

       else: //інакше

       header('Location: /'); //переадресація на головну
       exit;

       endif;

Все :).

Подякували: 221VOLT, leofun012

2

Re: Відправка webstorage в PHP

Видаліть http://replace.org.ua/topic/3689/ - копія

3

Re: Відправка webstorage в PHP

На скільки я зрозумів, то ви намагаєтесь використовувати localStorage в схемі авторизації, так?
Якщо так, то, по-перше, для сесій є ще sessionStorage (див. внизу), ну а по-друге, хоча я це ще не вивчав, швидше за все, через куки як і раніше потрібно буде передавати ідентифікатор сесії.

WebStorage доцільно використовувати коли треба зберігати дані, якими юзер може часто користуватись, і які не потрібно кожен раз передавати за кожним запитом.

Наприклад, на сайті значні ресурси може займати показ статистики по лайкам, коли на сторінці, скажімо 50 чи 100 повідомлень і в кожного повідомлення може бути і по 200, і по 5000 лайків, то як в такому разі визначати чи вже користувач поставив лайк конкретному повідомленню чи ні. За кожним разом смикати таблицю, де зберігаються всі лайки? Ні, це буде досить затратно.

Краще в такому разі використовувати WebStorage - про кожен лайк записуєте інфу сюди і витягуєте звідси. В такому разі біля кожного повідомлення можна писати загальну цифру лайків, а WebStorage користувача "знає" чи він вже ставив лайк під цим повідомленням, чи ні. Ну а таблицю з лайками використовувати лише, якщо користувач голосує...

Подякували: 221VOLT, leofun012

4

Re: Відправка webstorage в PHP

ktretyak написав:

На скільки я зрозумів, то ви намагаєтесь використовувати localStorage в схемі авторизації, так?
Якщо так, то, по-перше, для сесій є ще sessionStorage (див. внизу), ну а по-друге, хоча я це ще не вивчав, швидше за все, через куки як і раніше потрібно буде передавати ідентифікатор сесії.

WebStorage доцільно використовувати коли треба зберігати дані, якими юзер може часто користуватись, і які не потрібно кожен раз передавати за кожним запитом.

Наприклад, на сайті значні ресурси може займати показ статистики по лайкам, коли на сторінці, скажімо 50 чи 100 повідомлень і в кожного повідомлення може бути і по 200, і по 5000 лайків, то як в такому разі визначати чи вже користувач поставив лайк конкретному повідомленню чи ні. За кожним разом смикати таблицю, де зберігаються всі лайки? Ні, це буде досить затратно.

Краще в такому разі використовувати WebStorage - про кожен лайк записуєте інфу сюди і витягуєте звідси. В такому разі біля кожного повідомлення можна писати загальну цифру лайків, а WebStorage користувача "знає" чи він вже ставив лайк під цим повідомленням, чи ні. Ну а таблицю з лайками використовувати лише, якщо користувач голосує...


Я все це знаю :)
так для прикладу вказав login i password,суть не в цьому,а просто в передачі даних на сервер.
Авторизацію краще писати звичайними куками,сесіями.

Подякували: 221VOLT1

5

Re: Відправка webstorage в PHP

VTrim написав:

...
Я все це знаю
так для прикладу вказав login i password,суть не в цьому,а просто в передачі даних на сервер.
Авторизацію краще писати звичайними куками,сесіями.

Не просто "краще", а куки - єдино-можливий варіант.

Точніше, ваш приклад можна використовувати виключно у випадку, коли переходи в межах сайту здійснюються через JavaScript. В противному разі PHP ніяк не зможе визначити авторизованого користувача.

6 Востаннє редагувалося VTrim (21.11.2014 12:00:41)

Re: Відправка webstorage в PHP

ktretyak написав:
VTrim написав:

...
Я все це знаю
так для прикладу вказав login i password,суть не в цьому,а просто в передачі даних на сервер.
Авторизацію краще писати звичайними куками,сесіями.

Не просто "краще", а куки - єдино-можливий варіант.

Точніше, ваш приклад можна використовувати виключно у випадку, коли переходи в межах сайту здійснюються через JavaScript. В противному разі PHP ніяк не зможе визначити авторизованого користувача.

http://cs7002.сайт-злодій/c623926/v623926855/b9cc/m-p18X6O29k.jpg
Зможе (саме через JS),спочатку робимо форму авторизації (логін,пароль),відправляємо дані в обробник,там перевіряємо наявність таких даних і якщо вірно,то встановлюємо замість куків,webstorage з логіном та паролем. Потім при завантаженні нової сторінки,робимо AJAX POST запит до обробника,який замість куків,прийме той запит з логіном та паролем з webstorage та перевірить наявність таких даних в бд,якщо є,то створить асоціативний масив з даними і видасть результат в браузер,якщо ні,то помилку.

Для якоїсь найпростішої авторизації підійде.

Обробник

<?php 

(object)$db = new mysqli("localhost", "root", "test", "test"); 

(string)$user = $db->real_escape_string($_POST['login']); //дані логіна з webstorage
(string)$pass = $db->real_escape_string($_POST['password']); //дані пароля з webstorage
 
(object)$account = $db->query("SELECT * FROM users WHERE user = '{$user}' AND pass = '{$pass}' LIMIT 1");

if($account->num_rows > 0):
 
(object)$account = $account->fetch_object(); //обєкт з даними юзера
echo 'Авторизований як '.$account->user; //вивід логіна юзера

else:

echo 'Не авторизований';

endif;

Результат повернеться в браузер.

Подякували: 221VOLT, leofun012

7

Re: Відправка webstorage в PHP

класна тема, :) саме вчусь щось створювати елементарне, Like/Unlike взяв потренуватись
http://не-дійсний-домен/pages/mysql_05_looks.php правда стаття ще доробляється.
Я собі й здогадувавсь, що є кращі варіанти рішення питання Лайк/Анлайк,
потрібно розібратись  буде по порядку кукі-шмукі,....
а що таке webstorage взагалі перший раз чую :(

Подякували: 221VOLT1

8

Re: Відправка webstorage в PHP

Добре, коротко для таких як я новачків :)  профі можуть поправити

cookie - текстовий файлик на стороні клієнта (глядач сайту), що створюється браузером, об'єм 4 КБайти, досить маленький. Основне призначення - запам'ятати клієнта, логін, пароль, чи при заповненні форми зберегти дані, тобто для зручності клієнта.

webstorage - технології йдуть вперед, апгрейдений cookie, об'єм даних на стороні клієнта вже 5 MB, ну і собі так думаю,  відповідно збільшена функціональність. Перегляд сайту оффлайн, якщо перед цим його зберіг.

Подякували: 221VOLT1

9 Востаннє редагувалося Анатолій (24.11.2014 00:21:48)

Re: Відправка webstorage в PHP

ktretyak написав:

Наприклад, на сайті значні ресурси може займати показ статистики по лайкам, коли на сторінці, скажімо 50 чи 100 повідомлень і в кожного повідомлення може бути і по 200, і по 5000 лайків, то як в такому разі визначати чи вже користувач поставив лайк конкретному повідомленню чи ні. За кожним разом смикати таблицю, де зберігаються всі лайки? Ні, це буде досить затратно.

А затратно на вскидку можеш сказати в чому, сторінка буде завантажуватись на секунду довше чи що? При сучасних потужностях переглянути 5 000 лайків мені здається це дрібниці.
Та й то зробити просто запит до бази даних чи конкретно цей Ip оцінював статтю чи повідомлення чи ні і все, запит навскидку буде 0.003 секунди. ну і відповідно далі логіка....

ktretyak написав:

Не просто "краще", а куки - єдино-можливий варіант.
Точніше, ваш приклад можна використовувати виключно у випадку, коли переходи в межах сайту здійснюються через JavaScript. В противному разі PHP ніяк не зможе визначити авторизованого користувача.

А власне в чому перевага cookies, від простого визначення Ip-клієнта? Я власне в контексті проведення оцінювання Like/Unlike. Чи це цитата про інше, я не зрозумів

10

Re: Відправка webstorage в PHP

А затратно на вскидку можеш сказати в чому, сторінка буде завантажуватись на секунду довше чи що? При сучасних потужностях переглянути 5 000 лайків мені здається це дрібниці.
Та й то зробити просто запит до бази даних чи конкретно цей Ip оцінював статтю чи повідомлення чи ні і все, запит навскидку буде 0.003 секунди. ну і відповідно далі логіка....

Коротка відповідь - 5000 лайків це лише по одному повідомленні, а уявіть скільки цих лайків по всім повідомленням. Де вони будуть всі зберігатись? Правильно - в таблиці. А тепер уявіть, що цю таблицю з лайками треба зв'язувати з таблицею повідомлень, де також не 50 і не 100 їх, а можливо сотні тисяч...

Подякували: 221VOLT, flatliner2