Esp8266 Сессии Авторизация
Суть Вопроса
Как в esp8266 использовать сессию. Хотя бы как передать индикатор в ответ браузеру чтобы он ее запомнил. и как потом из запроса от браузера получить ключ сессии. Хранение сессии организую сам.Пред История
С помощью ESP8266 Можно создавать разные устройства, и не напрягаться по поводу защиты. Так как для управления нужно знать пароль к вай фай сети, но проблема возникает тогда когда для удаленного контроля нужно открыть мост в Интернет, И теперь человеку из Интернета уже не нужно знать пароль от вай фай. Все ворота открыты. И тут нужно сделать авторизацию, но как без сессий? Ну иле их подобия самодельного. Мне не нужен громоздкий код. Мне нужно понимание как это сделать. То есть как отправить ключ сессии чтобы браузер запомнил его, и как его добывать с каждого запроса. Не хотел бы все делать через js который смог бы добивать индикатор в начале сохранять в кеше, и потом при каждом запросе слать его как один из аргументов, вариант но не очень.У меня в арсенале Esp8266 01, Esp8266 07, Esp8266 12. Esp8266 01 глючные какие то по этому в серьёзе их не использую.
**Ответ:** рабочий код
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
String ssid = "botemm_LAN";
String password = "passwor1";
int ConnectNum = 20;
int Mode = 0;
ESP8266WebServer server(80); //Server on port 80
//Режим клиента
bool WiFiStartClient(String Ssid, String Pas)
{
// WiFi.softAPdisconnect();
// WiFi.disconnect();
int i = 0;
//Client
{
WiFi.mode(WIFI_AP); //WIFI_STA
Mode = WIFI_AP;
WiFi.begin(Ssid, Pas);
// Wait for connection
while (1) {
if(WiFi.status() == WL_CONNECTED) //Если подключились 1
{
Serial.println("");
Serial.print("Connected to ");
Serial.println(Ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
return true;
}
if(i>=ConnectNum) //времмя подключения прошло 0
{
return false;
}
delay(500);
Serial.print(".");
i++;
}
}
return false;
}
IPAddress myIP;
//Старт как точка доступа
bool WiFiStartPoint(String Ssid, String Pas)
{
//WiFi.softAPdisconnect();
// WiFi.disconnect();
//Server Point
{
IPAddress myIP;
myIP = WiFi.softAPIP(); //Get IP address
WiFi.mode(WIFI_STA); //Only Access point
Mode = WIFI_STA;
WiFi.softAP(Ssid, Pas); //Start HOTspot removing password will disable security
Serial.println("");
Serial.print("Create to ");
Serial.println(Ssid);
Serial.print("IP address: ");
Serial.println("192.168.4.1");
}
return true;
}
//Активировать сесии. они не будут работать без этого бреда сохранять да получаь нет
void InitCookie()
{
const char * headerkeys[] = {"User-Agent", "Cookie"} ;
size_t headerkeyssize = sizeof(headerkeys) / sizeof(char*);
//ask server to track these headers
server.collectHeaders(headerkeys, headerkeyssize);
}
int c = 0;
void handleRoot() {
String arg1 = server.arg("cmd");
if(arg1 == "login")
{
String S = "User=";
S+=c;
server.sendHeader("Cache-Control", "no-cache");
server.sendHeader("Set-Cookie", S);
server.sendHeader("Set-Cookie", "ESPSESSIONID=1");
Serial.println("CookieSet: "); Serial.println(c);
c++;
}
String STR = "";
if (server.hasHeader("Cookie"))
{
String coo = server.header("Cookie");
STR += coo;
Serial.println("Cookie: "); Serial.println(coo);
}
server.send(200, "text/html" ,STR);
return;
}
void setup(void) {
Serial.begin(74880);
//Подключиться к точке доступа, если нет создать свою
if(!WiFiStartClient( ssid, password))
{
Serial.println(""); Serial.println("error not conected");
if(!WiFiStartPoint("EspServerLib","12345678"))
Serial.println("error not started");
}
server.on("/", handleRoot); //Which routine to handle at root location
// server.onNotFound(handleNotFound); //Не существующая страница
InitCookie();
server.begin();
}
void loop(void) {
//if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status
server.handleClient();
// MDNS.update();
}
Получить строку сессий
String coo = server.header("Cookie");
Отправить куки в браузер
server.sendHeader("Set-Cookie", "user=botemm");
Надеюсь кому то поможет