PDA

View Full Version : [php] Utilizzare una Session come KEY


race2
06-01-2010, 12:48
Salve,
nella Tabella "carrello" di un E-commerce vorrei utilizzare il campo "Session" che e' un VARCHAR(32) come PRIMARY KEY, è sbagliato ?

C'è la remota possibilità che:
il Server GENERA session_id() identiche utenti differenti ???

SerMagnus
06-01-2010, 14:57
come primary key tecnicamente puoi inserire quello che ti pare ovviamente usare un indice char sarà più lento rispetto che int.

per le session_id essendo gestita da php non credo che si possano verificare collisioni, ci sarà sicuramente qualche meccanismo che prima di assegnarla verifichi che non sia già in uso quell'id, altrimenti tutto il concetto di sesisone perderebbe di senso.

cmq con le sessioni stai attento all'aspetto della sicurezza....

anonimizzato
06-01-2010, 14:59
Salve,
nella Tabella "carrello" di un E-commerce vorrei utilizzare il campo "Session" che e' un VARCHAR(32) come PRIMARY KEY, è sbagliato ?

C'è la remota possibilità che:
il Server GENERA session_id() identiche utenti differenti ???

Evita del tutto di usare un session_id come PK di una tabella a DB.

Al max usalo come campo UNIQUE.

race2
06-01-2010, 15:10
Ok, grazie mille SerMagnus, mi hai chiarito il concetto.

Sgurbat, perchè non devo come PK ??? ... cosa causa ???

race2
06-01-2010, 15:11
questa è la mia struttura ad ora:



CREATE TABLE `carrello` (
`sSession` VARCHAR(32) COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
`iID_Prodotto` INTEGER(11) NOT NULL,
`iID_Variante` INTEGER(11) NOT NULL,
`iQt` INTEGER(11) NOT NULL,
`dtInserimento` DATETIME NOT NULL,
PRIMARY KEY (`sSession`),
KEY `iID_Prodotto` (`iID_Prodotto`),
KEY `iID_Variante` (`iID_Variante`),
KEY `dtInserimento` (`dtInserimento`)

)ENGINE=MyISAM
CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci';

SerMagnus
06-01-2010, 16:42
xò ora che ci penso, effettivamente nn ha molto senso usare come PK la session_id

per gestire l'eliminazione o la modifica di prodotti va a finire che ti arravogli.

usando solo la session id ad esempio per eliminare un prodotto dal carrello devi fare la query passando oltre all'id di sessione anche l'id del prodotto e della variante

mentre utilizzando un id numerico ti basta inviare id e session_id