Creo que el manejo de los estados de sesion es independiente de la implementacion del lenguaje de scripting, ya sea PHP o ASP, y en ambos casos para utilizar variables de sesion es necesario que el usuario tenga habilitadas las cookies, por la forma de funcionamiento de la tecnologia de sesion.
Esta lo que hace es copiar un valor en la maquina del cliente (con cookies), lo que llamamos ID de session (SessionID), y con ese valor puede identificar cada peticion en el servidor, y guardar valores correspondientes a X peticion entre las paginas del mismo dominio.
No se si php se valga de algun algoritmo especial, como ocultar ese valor en algun campo oculto añadido a las paginas o algo asi. En ASP.NET solucionaron ese problema de una forma elegante, y es pasando el id de la sesion siempre en el querystring, de tal forma que cada peticion queda de la forma:
http://www.dominio.com/valoresqueide...io/pagina.aspx
siendo "valoresqueidentificanlasesion" una cadena identificadora unica para el visitante. Es muy poco elegante (visualmente) pero terrificamente poderosa, y con una sencillez en cuanto al desarrollo envidable (cero preocupacion por habilitar cookies ni nada de eso)